#include <bits/stdc++.h>
#define int long long
#define fast ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
#define lg2(n) (63-__builtin_clzll(n))
#define mask(n) (1LL << (n))
#define TASK ""
#define openfile(); if( fopen(TASK".inp", "r")){freopen(TASK".inp", "r", stdin);freopen(TASK".out", "w", stdout);}
#define lc(n) (n << 1)
#define rc(n) ((n << 1) | 1)
#define fi first
#define se second
#define FOR(i, l, r, k) for( int i = l; i <= r; i += k)
#define FOD(i, r, l, k) for( int i = r; i >= l; i -= k)
#define mii map<int,int>
#define umi unordered_map<int, int>
#define pii pair<int,int>
#define vi vector<int>
using namespace std;
const int oo = 1e18;
const int mod = 1e9 + 7;
const int nmax = 2e5 + 8;
const int base = 31;
int n, m, dis[nmax], dis2[nmax];
vector<pii> g[nmax];
void dijkstra(int u){
priority_queue<pii, vector<pii>, greater<pii>> pq;
pq.push({0, u});
dis[u] = 0;
while(!pq.empty()){
auto top = pq.top(); pq.pop();
if(top.fi > dis2[top.se]) continue;
for(auto &x : g[top.se]){
int val = top.fi + x.fi;
if(val < dis[x.se]){
pq.push({val, x.se});
swap(dis[x.se], dis2[x.se]);
dis[x.se] = val;
}
if(val < dis2[x.se] && val > dis[x.se]){
pq.push({val, x.se});
swap(val, dis2[x.se]);
}
}
}
}
main(){
fast;
openfile();
cin >> n >> m;
for(int i = 1; i <= m; ++i){
int u, v, w;
cin >> u >> v >> w;
g[u].push_back({w, v});
g[v].push_back({w, u});
}
memset(dis, 0x3f, sizeof dis);
memset(dis2, 0x3f, sizeof dis2);
dijkstra(1);
cout << dis2[n];
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgaW50IGxvbmcgbG9uZwojZGVmaW5lIGZhc3QgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7IGNpbi50aWUobnVsbHB0cik7IGNvdXQudGllKG51bGxwdHIpOwojZGVmaW5lIGxnMihuKSAoNjMtX19idWlsdGluX2NsemxsKG4pKQojZGVmaW5lIG1hc2sobikgKDFMTCA8PCAobikpCiNkZWZpbmUgVEFTSyAiIgojZGVmaW5lIG9wZW5maWxlKCk7ICBpZiggZm9wZW4oVEFTSyIuaW5wIiwgInIiKSl7ZnJlb3BlbihUQVNLIi5pbnAiLCAiciIsIHN0ZGluKTtmcmVvcGVuKFRBU0siLm91dCIsICJ3Iiwgc3Rkb3V0KTt9CiNkZWZpbmUgbGMobikgKG4gPDwgMSkKI2RlZmluZSByYyhuKSAoKG4gPDwgMSkgfCAxKQoKI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNlIHNlY29uZAojZGVmaW5lIEZPUihpLCBsLCByLCBrKSBmb3IoIGludCBpID0gbDsgaSA8PSByOyBpICs9IGspCiNkZWZpbmUgRk9EKGksIHIsIGwsIGspIGZvciggaW50IGkgPSByOyBpID49IGw7IGkgLT0gaykKCiNkZWZpbmUgbWlpIG1hcDxpbnQsaW50PgojZGVmaW5lIHVtaSB1bm9yZGVyZWRfbWFwPGludCwgaW50PgojZGVmaW5lIHBpaSBwYWlyPGludCxpbnQ+CiNkZWZpbmUgdmkgdmVjdG9yPGludD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgb28gPSAxZTE4Owpjb25zdCBpbnQgbW9kID0gMWU5ICsgNzsKY29uc3QgaW50IG5tYXggPSAyZTUgKyA4Owpjb25zdCBpbnQgYmFzZSA9IDMxOwoKaW50IG4sIG0sIGRpc1tubWF4XSwgZGlzMltubWF4XTsKdmVjdG9yPHBpaT4gZ1tubWF4XTsKCnZvaWQgZGlqa3N0cmEoaW50IHUpewogICAgcHJpb3JpdHlfcXVldWU8cGlpLCB2ZWN0b3I8cGlpPiwgZ3JlYXRlcjxwaWk+PiBwcTsKICAgIHBxLnB1c2goezAsIHV9KTsKICAgIGRpc1t1XSA9IDA7CiAgICB3aGlsZSghcHEuZW1wdHkoKSl7CiAgICAgICAgYXV0byB0b3AgPSBwcS50b3AoKTsgcHEucG9wKCk7CiAgICAgICAgaWYodG9wLmZpID4gZGlzMlt0b3Auc2VdKSBjb250aW51ZTsKICAgICAgICBmb3IoYXV0byAmeCA6IGdbdG9wLnNlXSl7CiAgICAgICAgICAgIGludCB2YWwgPSB0b3AuZmkgKyB4LmZpOwogICAgICAgICAgICBpZih2YWwgPCBkaXNbeC5zZV0pewogICAgICAgICAgICAgICAgcHEucHVzaCh7dmFsLCB4LnNlfSk7CiAgICAgICAgICAgICAgICBzd2FwKGRpc1t4LnNlXSwgZGlzMlt4LnNlXSk7CiAgICAgICAgICAgICAgICBkaXNbeC5zZV0gPSB2YWw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYodmFsIDwgZGlzMlt4LnNlXSAmJiB2YWwgPiBkaXNbeC5zZV0pewogICAgICAgICAgICAgICAgcHEucHVzaCh7dmFsLCB4LnNlfSk7CiAgICAgICAgICAgICAgICBzd2FwKHZhbCwgZGlzMlt4LnNlXSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0KCm1haW4oKXsKICAgIGZhc3Q7CiAgICBvcGVuZmlsZSgpOwogICAgY2luID4+IG4gPj4gbTsKICAgIGZvcihpbnQgaSA9IDE7IGkgPD0gbTsgKytpKXsKICAgICAgICBpbnQgdSwgdiwgdzsKICAgICAgICBjaW4gPj4gdSA+PiB2ID4+IHc7CiAgICAgICAgZ1t1XS5wdXNoX2JhY2soe3csIHZ9KTsKICAgICAgICBnW3ZdLnB1c2hfYmFjayh7dywgdX0pOwogICAgfQogICAgbWVtc2V0KGRpcywgMHgzZiwgc2l6ZW9mIGRpcyk7CiAgICBtZW1zZXQoZGlzMiwgMHgzZiwgc2l6ZW9mIGRpczIpOwogICAgZGlqa3N0cmEoMSk7CiAgICBjb3V0IDw8IGRpczJbbl07Cn0K