#include <bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(0);
int C,F,a,b; long long cost;
cin>>C>>F;
vector<pair<int,int>> flights[C+1];
for(int i=0; i<F; i++)
{
cin>>a>>b>>cost;
flights[a].push_back(make_pair(cost,b));
flights[b].push_back(make_pair(cost,a));
}
for(int i=1; i<=C; i++)
{
sort(flights[i].begin(), flights[i].end());
}
long long int mincost[C+1][C+1];
for(int i=1; i<=C; i++)
{
for(int j=1; j<=C; j++)
{
mincost[i][j]=LLONG_MAX;
}
}
for(int i=1; i<=C; i++)
{
long long int cost[C+1];
for(int j=1; j<=C; j++)
{
cost[j]=LLONG_MAX;
}
cost[i]=0;
priority_queue<pair<int,int>> Q;
Q.push(make_pair(0,i));
while(!Q.empty())
{
int X=Q.top().second;
Q.pop();
for(int j=0; j<flights[X].size(); j++)
{
int tcost=flights[X][j].first, idx=flights[X][j].second;
if (cost[idx]>cost[X]+tcost)
{
cost[idx]=cost[X]+tcost;
Q.push(make_pair(cost[idx], idx));
}
}
}
for(int j=1; j<=C; j++)
{
if(j!=i)
{
mincost[i][j]=cost[j];
mincost[j][i]=cost[j];
}
}
}
long long int ans=0;
for(int i=1; i<=C; i++)
{
for(int j=1; j<=C; j++)
{
//cout<<mincost[i][j]<<" ";
if(i!=j)
ans=max(ans,mincost[i][j]);
}
//cout<<endl;
}
cout<<ans<<endl;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiAKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAppbnQgbWFpbigpIAp7Cglpb3M6OnN5bmNfd2l0aF9zdGRpbygwKTsKCWludCBDLEYsYSxiOyBsb25nIGxvbmcgY29zdDsKCWNpbj4+Qz4+RjsKCXZlY3RvcjxwYWlyPGludCxpbnQ+PiBmbGlnaHRzW0MrMV07Cglmb3IoaW50IGk9MDsgaTxGOyBpKyspCgl7CgkgICAgY2luPj5hPj5iPj5jb3N0OwoJICAgIGZsaWdodHNbYV0ucHVzaF9iYWNrKG1ha2VfcGFpcihjb3N0LGIpKTsKCSAgICBmbGlnaHRzW2JdLnB1c2hfYmFjayhtYWtlX3BhaXIoY29zdCxhKSk7Cgl9Cglmb3IoaW50IGk9MTsgaTw9QzsgaSsrKQoJewoJICAgIHNvcnQoZmxpZ2h0c1tpXS5iZWdpbigpLCBmbGlnaHRzW2ldLmVuZCgpKTsKCX0KCWxvbmcgbG9uZyBpbnQgbWluY29zdFtDKzFdW0MrMV07Cglmb3IoaW50IGk9MTsgaTw9QzsgaSsrKQoJewoJICAgIGZvcihpbnQgaj0xOyBqPD1DOyBqKyspCgkgICAgewoJICAgICAgICBtaW5jb3N0W2ldW2pdPUxMT05HX01BWDsKCSAgICB9Cgl9Cglmb3IoaW50IGk9MTsgaTw9QzsgaSsrKQoJewoJICAgIGxvbmcgbG9uZyBpbnQgY29zdFtDKzFdOwoJICAgIGZvcihpbnQgaj0xOyBqPD1DOyBqKyspCgkgICAgewoJICAgICAgICBjb3N0W2pdPUxMT05HX01BWDsKCSAgICB9CgkgICAgY29zdFtpXT0wOwoJICAgIHByaW9yaXR5X3F1ZXVlPHBhaXI8aW50LGludD4+IFE7CgkgICAgUS5wdXNoKG1ha2VfcGFpcigwLGkpKTsKCSAgICB3aGlsZSghUS5lbXB0eSgpKQoJICAgIHsKCSAgICAgICAgaW50IFg9US50b3AoKS5zZWNvbmQ7CgkgICAgICAgIFEucG9wKCk7CgkgICAgICAgIGZvcihpbnQgaj0wOyBqPGZsaWdodHNbWF0uc2l6ZSgpOyBqKyspCgkgICAgICAgIHsKCSAgICAgICAgICAgIGludCB0Y29zdD1mbGlnaHRzW1hdW2pdLmZpcnN0LCBpZHg9ZmxpZ2h0c1tYXVtqXS5zZWNvbmQ7CgkgICAgICAgICAgICBpZiAoY29zdFtpZHhdPmNvc3RbWF0rdGNvc3QpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgY29zdFtpZHhdPWNvc3RbWF0rdGNvc3Q7CiAgICAgICAgICAgICAgICAgICAgUS5wdXNoKG1ha2VfcGFpcihjb3N0W2lkeF0sIGlkeCkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgkgICAgfQoJICAgIGZvcihpbnQgaj0xOyBqPD1DOyBqKyspCgkgICAgewoJICAgICAgICBpZihqIT1pKQoJICAgICAgICB7CgkgICAgICAgICAgICBtaW5jb3N0W2ldW2pdPWNvc3Rbal07CgkgICAgICAgICAgICBtaW5jb3N0W2pdW2ldPWNvc3Rbal07CgkgICAgICAgIH0KCSAgICB9CgkgICAgCgl9Cglsb25nIGxvbmcgaW50IGFucz0wOwoJZm9yKGludCBpPTE7IGk8PUM7IGkrKykKCXsKCSAgICBmb3IoaW50IGo9MTsgajw9QzsgaisrKQoJICAgIHsKCSAgICAgICAgLy9jb3V0PDxtaW5jb3N0W2ldW2pdPDwiICI7CgkgICAgICAgIGlmKGkhPWopCgkgICAgICAgICAgICBhbnM9bWF4KGFucyxtaW5jb3N0W2ldW2pdKTsKCSAgICB9CgkgICAgLy9jb3V0PDxlbmRsOwoJfQoJY291dDw8YW5zPDxlbmRsOwoJcmV0dXJuIDA7Cn0gIA==