#include <bits/stdc++.h>
using namespace std;
using ll = long long; // code chat em bị bạn em bắt nộp
const ll INF = (ll)9e18;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int N, M;
if (!(cin >> N >> M)) return 0;
if (N == 1) { cout << 0 << "\n"; return 0; }
struct Edge { int u, v; ll f; };
vector<Edge> E(M);
// Mỗi cạnh -> 2 trạng thái: id_u = 2*i, id_v = 2*i+1
int S = 2*M; // siêu nguồn (tần số 0 tại khoang 1)
vector<vector<pair<int,ll>>> G(2*M + 1); // (to, w)
vector<vector<pair<ll,int>>> at(N+1);
// at[u] = list { (freq f, state_id) } của các cạnh kề u
for (int i = 0; i < M; ++i) {
int a,b; ll f;
cin >> a >> b >> f;
E[i] = {a,b,f};
int id_u = 2*i, id_v = 2*i+1;
// qua lại trên chính hành lang i: chi phí 0
G[id_u].push_back({id_v, 0});
G[id_v].push_back({id_u, 0});
// gắn trạng thái vào hai đầu mút
at[a].push_back({f, id_u});
at[b].push_back({f, id_v});
}
// Tạo các "cạnh đổi tần số" trong từng khoang bằng cách nối các tần số kề nhau sau khi sort
for (int u = 1; u <= N; ++u) {
auto &vec = at[u];
if (vec.empty()) continue;
sort(vec.begin(), vec.end(), [](auto &A, auto &B){
if (A.first != B.first) return A.first < B.first;
return A.second < B.second;
});
for (int i = 0; i + 1 < (int)vec.size(); ++i) {
ll df = vec[i+1].first - vec[i].first; // >= 0
int a = vec[i].second, b = vec[i+1].second;
G[a].push_back({b, df});
G[b].push_back({a, df});
}
}
// Nối siêu nguồn S -> một trạng thái ở khoang 1 có tần số nhỏ nhất
if (at[1].empty()) {
// đồ thị liên thông ⇒ khoang 1 phải có bậc > 0, nhưng cứ phòng hờ:
cout << -1 << "\n";
return 0;
} else {
// phần tử đầu sau khi sort ở trên là tần số nhỏ nhất
// Nếu chưa sort, sort nhanh riêng cho at[1]
sort(at[1].begin(), at[1].end(), [](auto &A, auto &B){
if (A.first != B.first) return A.first < B.first;
return A.second < B.second;
});
ll fmin = at[1][0].first;
int sid = at[1][0].second;
G[S].push_back({sid, fmin}); // từ 0 lên fmin
}
// Dijkstra từ S
int V = 2*M + 1;
vector<ll> dist(V, INF);
using P = pair<ll,int>;
priority_queue<P, vector<P>, greater<P>> pq;
dist[S] = 0;
pq.push({0, S});
while (!pq.empty()) {
auto [du, u] = pq.top(); pq.pop();
if (du != dist[u]) continue;
for (auto [v, w] : G[u]) {
if (dist[v] > du + w) {
dist[v] = du + w;
pq.push({dist[v], v});
}
}
}
// Lấy min trên mọi trạng thái "đang ở khoang N"
ll ans = INF;
for (auto &[f, sid] : at[N]) ans = min(ans, dist[sid]);
cout << ans << "\n";
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp1c2luZyBsbCA9IGxvbmcgbG9uZzsgLy8gY29kZSBjaGF0IGVtIGLhu4sgYuG6oW4gZW0gYuG6r3QgbuG7mXAKY29uc3QgbGwgSU5GID0gKGxsKTllMTg7CgppbnQgbWFpbigpIHsKICAgIGlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUobnVsbHB0cik7CgogICAgaW50IE4sIE07CiAgICBpZiAoIShjaW4gPj4gTiA+PiBNKSkgcmV0dXJuIDA7CgogICAgaWYgKE4gPT0gMSkgeyBjb3V0IDw8IDAgPDwgIlxuIjsgcmV0dXJuIDA7IH0KCiAgICBzdHJ1Y3QgRWRnZSB7IGludCB1LCB2OyBsbCBmOyB9OwogICAgdmVjdG9yPEVkZ2U+IEUoTSk7CgogICAgLy8gTeG7l2kgY+G6oW5oIC0+IDIgdHLhuqFuZyB0aMOhaTogaWRfdSA9IDIqaSwgaWRfdiA9IDIqaSsxCiAgICBpbnQgUyA9IDIqTTsgLy8gc2nDqnUgbmd14buTbiAodOG6p24gc+G7kSAwIHThuqFpIGtob2FuZyAxKQogICAgdmVjdG9yPHZlY3RvcjxwYWlyPGludCxsbD4+PiBHKDIqTSArIDEpOyAvLyAodG8sIHcpCgogICAgdmVjdG9yPHZlY3RvcjxwYWlyPGxsLGludD4+PiBhdChOKzEpOyAKICAgIC8vIGF0W3VdID0gbGlzdCB7IChmcmVxIGYsIHN0YXRlX2lkKSB9IGPhu6dhIGPDoWMgY+G6oW5oIGvhu4EgdQoKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTTsgKytpKSB7CiAgICAgICAgaW50IGEsYjsgbGwgZjsKICAgICAgICBjaW4gPj4gYSA+PiBiID4+IGY7CiAgICAgICAgRVtpXSA9IHthLGIsZn07CiAgICAgICAgaW50IGlkX3UgPSAyKmksIGlkX3YgPSAyKmkrMTsKCiAgICAgICAgLy8gcXVhIGzhuqFpIHRyw6puIGNow61uaCBow6BuaCBsYW5nIGk6IGNoaSBwaMOtIDAKICAgICAgICBHW2lkX3VdLnB1c2hfYmFjayh7aWRfdiwgMH0pOwogICAgICAgIEdbaWRfdl0ucHVzaF9iYWNrKHtpZF91LCAwfSk7CgogICAgICAgIC8vIGfhuq9uIHRy4bqhbmcgdGjDoWkgdsOgbyBoYWkgxJHhuqd1IG3DunQKICAgICAgICBhdFthXS5wdXNoX2JhY2soe2YsIGlkX3V9KTsKICAgICAgICBhdFtiXS5wdXNoX2JhY2soe2YsIGlkX3Z9KTsKICAgIH0KCiAgICAvLyBU4bqhbyBjw6FjICJj4bqhbmggxJHhu5VpIHThuqduIHPhu5EiIHRyb25nIHThu6tuZyBraG9hbmcgYuG6sW5nIGPDoWNoIG7hu5FpIGPDoWMgdOG6p24gc+G7kSBr4buBIG5oYXUgc2F1IGtoaSBzb3J0CiAgICBmb3IgKGludCB1ID0gMTsgdSA8PSBOOyArK3UpIHsKICAgICAgICBhdXRvICZ2ZWMgPSBhdFt1XTsKICAgICAgICBpZiAodmVjLmVtcHR5KCkpIGNvbnRpbnVlOwogICAgICAgIHNvcnQodmVjLmJlZ2luKCksIHZlYy5lbmQoKSwgW10oYXV0byAmQSwgYXV0byAmQil7IAogICAgICAgICAgICBpZiAoQS5maXJzdCAhPSBCLmZpcnN0KSByZXR1cm4gQS5maXJzdCA8IEIuZmlyc3Q7CiAgICAgICAgICAgIHJldHVybiBBLnNlY29uZCA8IEIuc2Vjb25kOwogICAgICAgIH0pOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpICsgMSA8IChpbnQpdmVjLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgIGxsIGRmID0gdmVjW2krMV0uZmlyc3QgLSB2ZWNbaV0uZmlyc3Q7IC8vID49IDAKICAgICAgICAgICAgaW50IGEgPSB2ZWNbaV0uc2Vjb25kLCBiID0gdmVjW2krMV0uc2Vjb25kOwogICAgICAgICAgICBHW2FdLnB1c2hfYmFjayh7YiwgZGZ9KTsKICAgICAgICAgICAgR1tiXS5wdXNoX2JhY2soe2EsIGRmfSk7CiAgICAgICAgfQogICAgfQoKICAgIC8vIE7hu5FpIHNpw6p1IG5ndeG7k24gUyAtPiBt4buZdCB0cuG6oW5nIHRow6FpIOG7nyBraG9hbmcgMSBjw7MgdOG6p24gc+G7kSBuaOG7jyBuaOG6pXQKICAgIGlmIChhdFsxXS5lbXB0eSgpKSB7CiAgICAgICAgLy8gxJHhu5MgdGjhu4sgbGnDqm4gdGjDtG5nIOKHkiBraG9hbmcgMSBwaOG6o2kgY8OzIGLhuq1jID4gMCwgbmjGsG5nIGPhu6kgcGjDsm5nIGjhu506CiAgICAgICAgY291dCA8PCAtMSA8PCAiXG4iOwogICAgICAgIHJldHVybiAwOwogICAgfSBlbHNlIHsKICAgICAgICAvLyBwaOG6p24gdOG7rSDEkeG6p3Ugc2F1IGtoaSBzb3J0IOG7nyB0csOqbiBsw6AgdOG6p24gc+G7kSBuaOG7jyBuaOG6pXQKICAgICAgICAvLyBO4bq/dSBjaMawYSBzb3J0LCBzb3J0IG5oYW5oIHJpw6puZyBjaG8gYXRbMV0KICAgICAgICBzb3J0KGF0WzFdLmJlZ2luKCksIGF0WzFdLmVuZCgpLCBbXShhdXRvICZBLCBhdXRvICZCKXsKICAgICAgICAgICAgaWYgKEEuZmlyc3QgIT0gQi5maXJzdCkgcmV0dXJuIEEuZmlyc3QgPCBCLmZpcnN0OwogICAgICAgICAgICByZXR1cm4gQS5zZWNvbmQgPCBCLnNlY29uZDsKICAgICAgICB9KTsKICAgICAgICBsbCBmbWluID0gYXRbMV1bMF0uZmlyc3Q7CiAgICAgICAgaW50IHNpZCAgPSBhdFsxXVswXS5zZWNvbmQ7CiAgICAgICAgR1tTXS5wdXNoX2JhY2soe3NpZCwgZm1pbn0pOyAvLyB04burIDAgbMOqbiBmbWluCiAgICB9CgogICAgLy8gRGlqa3N0cmEgdOG7qyBTCiAgICBpbnQgViA9IDIqTSArIDE7CiAgICB2ZWN0b3I8bGw+IGRpc3QoViwgSU5GKTsKICAgIHVzaW5nIFAgPSBwYWlyPGxsLGludD47CiAgICBwcmlvcml0eV9xdWV1ZTxQLCB2ZWN0b3I8UD4sIGdyZWF0ZXI8UD4+IHBxOwoKICAgIGRpc3RbU10gPSAwOwogICAgcHEucHVzaCh7MCwgU30pOwoKICAgIHdoaWxlICghcHEuZW1wdHkoKSkgewogICAgICAgIGF1dG8gW2R1LCB1XSA9IHBxLnRvcCgpOyBwcS5wb3AoKTsKICAgICAgICBpZiAoZHUgIT0gZGlzdFt1XSkgY29udGludWU7CiAgICAgICAgZm9yIChhdXRvIFt2LCB3XSA6IEdbdV0pIHsKICAgICAgICAgICAgaWYgKGRpc3Rbdl0gPiBkdSArIHcpIHsKICAgICAgICAgICAgICAgIGRpc3Rbdl0gPSBkdSArIHc7CiAgICAgICAgICAgICAgICBwcS5wdXNoKHtkaXN0W3ZdLCB2fSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgLy8gTOG6pXkgbWluIHRyw6puIG3hu41pIHRy4bqhbmcgdGjDoWkgIsSRYW5nIOG7nyBraG9hbmcgTiIKICAgIGxsIGFucyA9IElORjsKICAgIGZvciAoYXV0byAmW2YsIHNpZF0gOiBhdFtOXSkgYW5zID0gbWluKGFucywgZGlzdFtzaWRdKTsKCiAgICBjb3V0IDw8IGFucyA8PCAiXG4iOwogICAgcmV0dXJuIDA7Cn0K