#include <bits/stdc++.h>
#define fi first
#define se second
using namespace std;
const long long oo=1e18;
const int mod=1e9+7;
void home()
{
freopen("main.inp","r",stdin);
freopen("main.out","w",stdout);
}
bool bit(int x,int i){return (x>>i)&1;}
int n,m,node;
vector<pair<int,int>>a[600005];
vector<pair<int,int>>g[600005];
map<pair<int,int>,int>mp;
long long d[600005];
long long DIJK()
{
fill(d+1,d+node+1,oo);
priority_queue<pair<long long,int>,vector<pair<long long,int>>,greater<pair<long long,int>>>q;
q.push({0,1});d[1]=0;
while(!q.empty())
{
auto [w,u]=q.top();q.pop();
if(d[u]<w)continue;
for(auto [w1,v]:g[u])
{
if(d[v]>d[u]+w1)
{
d[v]=d[u]+w1;
q.push({d[v],v});
}
}
}
return d[n];
}
void Tcmduc_VOI26()
{
cin>>n>>m;node=n;
for(int i=1;i<=m;i++)
{
int u,v,w;cin>>u>>v>>w;
a[u].push_back({w,v});
a[v].push_back({w,u});
mp[{u,v}]=++node;
mp[{v,u}]=node;
}
for(int u=1;u<=n;u++)
{
sort(a[u].begin(),a[u].end());int pre=0,we=0;
for(auto [w,v]:a[u])
{
int x=mp[{u,v}];
if(pre)
{
g[pre].push_back({w-we,x});
g[x].push_back({w-we,pre});
}
pre=x;we=w;
}
}
for(auto [w,v]:a[1])
{
int x=mp[{1,v}];
g[1].push_back({w,x});
g[x].push_back({w,1});
}
for(auto [w,v]:a[n])
{
int x=mp[{n,v}];
g[n].push_back({0,x});
g[x].push_back({0,n});
}
cout<<DIJK()<<'\n';
}
int main()
{
ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);//home();
Tcmduc_VOI26();
cerr<<'\n';
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKY29uc3QgbG9uZyBsb25nIG9vPTFlMTg7CmNvbnN0IGludCBtb2Q9MWU5Kzc7CnZvaWQgaG9tZSgpCnsKICAgIGZyZW9wZW4oIm1haW4uaW5wIiwiciIsc3RkaW4pOwogICAgZnJlb3BlbigibWFpbi5vdXQiLCJ3IixzdGRvdXQpOwp9CmJvb2wgYml0KGludCB4LGludCBpKXtyZXR1cm4gKHg+PmkpJjE7fQppbnQgbixtLG5vZGU7CnZlY3RvcjxwYWlyPGludCxpbnQ+PmFbNjAwMDA1XTsKdmVjdG9yPHBhaXI8aW50LGludD4+Z1s2MDAwMDVdOwptYXA8cGFpcjxpbnQsaW50PixpbnQ+bXA7CmxvbmcgbG9uZyBkWzYwMDAwNV07CmxvbmcgbG9uZyBESUpLKCkKewogICAgZmlsbChkKzEsZCtub2RlKzEsb28pOwogICAgcHJpb3JpdHlfcXVldWU8cGFpcjxsb25nIGxvbmcsaW50Pix2ZWN0b3I8cGFpcjxsb25nIGxvbmcsaW50Pj4sZ3JlYXRlcjxwYWlyPGxvbmcgbG9uZyxpbnQ+Pj5xOwogICAgcS5wdXNoKHswLDF9KTtkWzFdPTA7CiAgICB3aGlsZSghcS5lbXB0eSgpKQogICAgewogICAgICAgIGF1dG8gW3csdV09cS50b3AoKTtxLnBvcCgpOwogICAgICAgIGlmKGRbdV08dyljb250aW51ZTsKICAgICAgICBmb3IoYXV0byBbdzEsdl06Z1t1XSkKICAgICAgICB7CiAgICAgICAgICAgIGlmKGRbdl0+ZFt1XSt3MSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZFt2XT1kW3VdK3cxOwogICAgICAgICAgICAgICAgcS5wdXNoKHtkW3ZdLHZ9KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBkW25dOwp9CnZvaWQgVGNtZHVjX1ZPSTI2KCkKewogICAgY2luPj5uPj5tO25vZGU9bjsKICAgIGZvcihpbnQgaT0xO2k8PW07aSsrKQogICAgewogICAgICAgIGludCB1LHYsdztjaW4+PnU+PnY+Pnc7CiAgICAgICAgYVt1XS5wdXNoX2JhY2soe3csdn0pOwogICAgICAgIGFbdl0ucHVzaF9iYWNrKHt3LHV9KTsKICAgICAgICBtcFt7dSx2fV09Kytub2RlOwogICAgICAgIG1wW3t2LHV9XT1ub2RlOwogICAgfQogICAgZm9yKGludCB1PTE7dTw9bjt1KyspCiAgICB7CiAgICAgICAgc29ydChhW3VdLmJlZ2luKCksYVt1XS5lbmQoKSk7aW50IHByZT0wLHdlPTA7CiAgICAgICAgZm9yKGF1dG8gW3csdl06YVt1XSkKICAgICAgICB7CiAgICAgICAgICAgIGludCB4PW1wW3t1LHZ9XTsKICAgICAgICAgICAgaWYocHJlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBnW3ByZV0ucHVzaF9iYWNrKHt3LXdlLHh9KTsKICAgICAgICAgICAgICAgIGdbeF0ucHVzaF9iYWNrKHt3LXdlLHByZX0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHByZT14O3dlPXc7CiAgICAgICAgfQogICAgfQogICAgZm9yKGF1dG8gW3csdl06YVsxXSkKICAgIHsKICAgICAgICBpbnQgeD1tcFt7MSx2fV07CiAgICAgICAgZ1sxXS5wdXNoX2JhY2soe3cseH0pOwogICAgICAgIGdbeF0ucHVzaF9iYWNrKHt3LDF9KTsKICAgIH0KICAgIGZvcihhdXRvIFt3LHZdOmFbbl0pCiAgICB7CiAgICAgICAgaW50IHg9bXBbe24sdn1dOwogICAgICAgIGdbbl0ucHVzaF9iYWNrKHswLHh9KTsKICAgICAgICBnW3hdLnB1c2hfYmFjayh7MCxufSk7CiAgICB9CiAgICBjb3V0PDxESUpLKCk8PCdcbic7Cn0KaW50IG1haW4oKQp7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApO2Npbi50aWUoMCk7Y291dC50aWUoMCk7Ly9ob21lKCk7CiAgICBUY21kdWNfVk9JMjYoKTsKICAgIGNlcnI8PCdcbic7CiAgICByZXR1cm4gMDsKfQo=