#include <iostream>
#include <queue>
#include <vector>
#include <map>
#include <climits>
using namespace std;
vector<long long> djkestra(map<long long, map<long long,long long> >& Map,long long n,long long i)
{
vector<long long> dp(n,LLONG_MAX);
dp[i]=0;
priority_queue<long long> pq;
pq.push(i);
while(!pq.empty())
{
long long x = pq.top();
pq.pop();
for(auto it=Map[x].begin();it!=Map[x].end();it++)
{
if(dp[x] != LLONG_MAX && dp[it->first] > dp[x] + it->second)
{
dp[it->first] = dp[x] + it->second;
pq.push(it->first);
}
}
}
return dp;
}
int main() {
long long n,m;
cin>>n>>m;
map<long long, map<long long,long long> > Map1;
map<long long, map<long long,long long> > Map2;
for(long long i=0;i<m;i++)
{
long long a,b,c;
cin>>a>>b>>c;
Map1[a-1][b-1]=c;
Map2[b-1][a-1]=c;
}
vector<long long> dist = djkestra(Map1,n,0);
vector<long long> dist_rev = djkestra(Map2,n,n-1);
long long ans = LLONG_MAX;
for(long long i=0;i<n;i++)
{
for(auto it=Map1[i].begin();it!=Map1[i].end();it++)
{
long long st = i;
long long ed = it->first;
if(dist[st] != LLONG_MAX && dist_rev[ed] != LLONG_MAX)
ans = min(ans,dist[st]+dist_rev[ed]+it->second/2);
}
}
cout<<ans<<endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8cXVldWU+CiNpbmNsdWRlIDx2ZWN0b3I+CiNpbmNsdWRlIDxtYXA+CiNpbmNsdWRlIDxjbGltaXRzPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdmVjdG9yPGxvbmcgbG9uZz4gZGprZXN0cmEobWFwPGxvbmcgbG9uZywgbWFwPGxvbmcgbG9uZyxsb25nIGxvbmc+ID4mIE1hcCxsb25nIGxvbmcgbixsb25nIGxvbmcgaSkKewoJdmVjdG9yPGxvbmcgbG9uZz4gZHAobixMTE9OR19NQVgpOwoJZHBbaV09MDsKCXByaW9yaXR5X3F1ZXVlPGxvbmcgbG9uZz4gcHE7CglwcS5wdXNoKGkpOwoJCgl3aGlsZSghcHEuZW1wdHkoKSkKCXsKCQlsb25nIGxvbmcgeCA9IHBxLnRvcCgpOwoJCXBxLnBvcCgpOwoJCQoJCWZvcihhdXRvIGl0PU1hcFt4XS5iZWdpbigpO2l0IT1NYXBbeF0uZW5kKCk7aXQrKykKCQl7CgkJCWlmKGRwW3hdICE9IExMT05HX01BWCAmJiBkcFtpdC0+Zmlyc3RdID4gZHBbeF0gKyBpdC0+c2Vjb25kKQoJCQl7CgkJCQlkcFtpdC0+Zmlyc3RdID0gZHBbeF0gKyBpdC0+c2Vjb25kOwoJCQkJcHEucHVzaChpdC0+Zmlyc3QpOwoJCQl9CgkJfQoJfQoJCglyZXR1cm4gZHA7Cn0KCgppbnQgbWFpbigpIHsKCQoJbG9uZyBsb25nIG4sbTsKCWNpbj4+bj4+bTsKCQoJbWFwPGxvbmcgbG9uZywgbWFwPGxvbmcgbG9uZyxsb25nIGxvbmc+ID4gTWFwMTsKCW1hcDxsb25nIGxvbmcsIG1hcDxsb25nIGxvbmcsbG9uZyBsb25nPiA+IE1hcDI7CgkKCWZvcihsb25nIGxvbmcgaT0wO2k8bTtpKyspCgl7CgkJbG9uZyBsb25nIGEsYixjOwoJCWNpbj4+YT4+Yj4+YzsKCQlNYXAxW2EtMV1bYi0xXT1jOwoJCU1hcDJbYi0xXVthLTFdPWM7Cgl9CgkKCXZlY3Rvcjxsb25nIGxvbmc+IGRpc3QgPSBkamtlc3RyYShNYXAxLG4sMCk7Cgl2ZWN0b3I8bG9uZyBsb25nPiBkaXN0X3JldiA9IGRqa2VzdHJhKE1hcDIsbixuLTEpOwoJCglsb25nIGxvbmcgYW5zID0gTExPTkdfTUFYOwoJZm9yKGxvbmcgbG9uZyBpPTA7aTxuO2krKykKCXsKCQlmb3IoYXV0byBpdD1NYXAxW2ldLmJlZ2luKCk7aXQhPU1hcDFbaV0uZW5kKCk7aXQrKykKCQl7CgkJCWxvbmcgbG9uZyBzdCA9IGk7CgkJCWxvbmcgbG9uZyBlZCA9IGl0LT5maXJzdDsKCQkJCgkJCWlmKGRpc3Rbc3RdICE9IExMT05HX01BWCAmJiBkaXN0X3JldltlZF0gIT0gTExPTkdfTUFYKQoJCQlhbnMgPSBtaW4oYW5zLGRpc3Rbc3RdK2Rpc3RfcmV2W2VkXStpdC0+c2Vjb25kLzIpOwoJCX0KCX0KCQoJY291dDw8YW5zPDxlbmRsOwoJCglyZXR1cm4gMDsKfQ==