#include<iostream>#include<stdio.h>#include<string.h>#include<algorithm>#define maxn 444444#define int long longusingnamespace std ;int n , m ;intread(){int x =0, f =1;char s =getchar();while(s >'9'|| s <'0'){if(s =='-') f =-1; s =getchar();}while(s <='9'&& s >='0'){x = x *10+(s-'0'); s =getchar();}return x*f ;}int head[maxn], vis[maxn], fa[maxn];struct dy{int x , y , z , next ;}a[maxn];int t ;voidadd(int x ,int y ,int z){
a[++t].x = x ;
a[t].y = y ;
a[t].z = z ;
a[t].next = head[x];
head[x]= t ;}int deep[maxn], dis[maxn];int maxx =-1, tag ;voiddfs(int u,int fa){for(int i = head[u]; i ; i = a[i].next){int v = a[i].y ;if(v == fa)continue;
dis[v]= dis[u]+ a[i].z ;if(dis[v]> dis[tag]) tag = v ;dfs(v,u);}}int D[maxn];voidDfs(int u ,int fa){for(int i = head[u]; i ; i = a[i].next){int v = a[i].y ;if(v == fa)continue;
D[v]= D[u]+ a[i].z ;Dfs(v,u);}}signed main (){
n =read(), m =read();while(m --){int x =read(), y =read(), z =read();add(x,y,z);add(y,x,z);}dfs(4,0);int lc = tag ;memset(dis,0,sizeof(dis));dfs(lc,0);int rc = tag ;int L = dis[rc];Dfs(rc,0);//cout << lc << "*" <<rc <<" " <<L<<endl ;for(int i =1; i <= n ; i ++){if(i == lc || i == rc)continue;//cout << i << " " << D[i] <<" " << dis[i] <<endl ;
maxx =max(maxx,min(D[i],dis[i]));// cout << maxx << endl ;}
cout << maxx + L <<endl ;return0;}