#include <bits/stdc++.h>
using namespace std;
typedef vector<vector<pair<int,int> > > vvpii;
vvpii graph;
vector<int> d;
int V, E;
bool comp(int a, int b)
{
return d[a] > d[b];
}
void dijkstra(int src)
{
vector<int> v(V);
for (int i = 0; i < V; ++i)
{
v[i] = i;
}
d = vector<int>(V,INT_MAX);
d[src] = 0;
make_heap(v.begin(),v.end(),comp);
int ctr = V-1;
while (ctr--)
{
pop_heap(v.begin(), v.end(), comp);
int u = v.back(); v.pop_back();
//cout<<"u = "<<u<<endl;
for (int i = 0; i < graph[u].size(); ++i)
{
pair<int,int> a = graph[u][i];
// cout<<"Access el "<<a.first<<"\n";
if (d[a.first] > d[u] + a.second)
d[a.first] = d[u] + a.second;
}
make_heap(v.begin(),v.end(),comp);
/*cout<<"d[] mapp \n";
for (int i = 0; i < V; ++i)
{
cout<<i<<" = "<<d[i]<<endl;
}*/
}
}
int main()
{
cin>>V;
//Consider working with undirected here.
graph = vvpii(V);
cin>>E;
for (int i = 0; i < E; ++i)
{
///cout<<"hye";
int a,b,w;
cin>>a>>b>>w;
graph[a-1].push_back(make_pair(b-1,w));
graph[b-1].push_back(make_pair(a-1,w));
}
long maxi = 0;
for (int i = 0; i < V; ++i)
{
dijkstra(i);
for (int j = 0; j < V; ++j)
{
if (d[j] != INT_MAX)
{
if (d[j] > maxi)
maxi = d[j];
}
}
}
cout<<maxi;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnR5cGVkZWYgdmVjdG9yPHZlY3RvcjxwYWlyPGludCxpbnQ+ID4gPiB2dnBpaTsKdnZwaWkgZ3JhcGg7CnZlY3RvcjxpbnQ+IGQ7CmludCBWLCBFOwpib29sIGNvbXAoaW50IGEsIGludCBiKQp7CglyZXR1cm4gZFthXSA+IGRbYl07IAp9CnZvaWQgZGlqa3N0cmEoaW50IHNyYykKewoJdmVjdG9yPGludD4gdihWKTsKCWZvciAoaW50IGkgPSAwOyBpIDwgVjsgKytpKQoJewoJCXZbaV0gPSBpOwoJfQoJZCA9IHZlY3RvcjxpbnQ+KFYsSU5UX01BWCk7CglkW3NyY10gPSAwOwoJbWFrZV9oZWFwKHYuYmVnaW4oKSx2LmVuZCgpLGNvbXApOwoJaW50IGN0ciA9IFYtMTsKCXdoaWxlIChjdHItLSkKCXsKCQlwb3BfaGVhcCh2LmJlZ2luKCksIHYuZW5kKCksIGNvbXApOwoJCWludCB1ID0gdi5iYWNrKCk7IHYucG9wX2JhY2soKTsKCQkvL2NvdXQ8PCJ1ID0gIjw8dTw8ZW5kbDsKCQlmb3IgKGludCBpID0gMDsgaSA8IGdyYXBoW3VdLnNpemUoKTsgKytpKQoJCXsKCQkJcGFpcjxpbnQsaW50PiBhID0gZ3JhcGhbdV1baV07CgkJLy8JY291dDw8IkFjY2VzcyBlbCAiPDxhLmZpcnN0PDwiXG4iOwoJCQlpZiAoZFthLmZpcnN0XSA+IGRbdV0gKyBhLnNlY29uZCkKCQkJCWRbYS5maXJzdF0gPSBkW3VdICsgYS5zZWNvbmQ7CgkJfQoJCW1ha2VfaGVhcCh2LmJlZ2luKCksdi5lbmQoKSxjb21wKTsKCQkvKmNvdXQ8PCJkW10gbWFwcCBcbiI7CgkJZm9yIChpbnQgaSA9IDA7IGkgPCBWOyArK2kpCgkJewoJCQljb3V0PDxpPDwiID0gIjw8ZFtpXTw8ZW5kbDsKCQl9Ki8KCX0KfQppbnQgbWFpbigpCnsKCWNpbj4+VjsKCS8vQ29uc2lkZXIgd29ya2luZyB3aXRoIHVuZGlyZWN0ZWQgaGVyZS4KCWdyYXBoID0gdnZwaWkoVik7CgoJY2luPj5FOwoJZm9yIChpbnQgaSA9IDA7IGkgPCBFOyArK2kpCgl7CgkJLy8vY291dDw8Imh5ZSI7CgkJaW50IGEsYix3OwoJCWNpbj4+YT4+Yj4+dzsKCQlncmFwaFthLTFdLnB1c2hfYmFjayhtYWtlX3BhaXIoYi0xLHcpKTsKCQlncmFwaFtiLTFdLnB1c2hfYmFjayhtYWtlX3BhaXIoYS0xLHcpKTsKCX0KCWxvbmcgbWF4aSA9IDA7Cglmb3IgKGludCBpID0gMDsgaSA8IFY7ICsraSkKCXsKCQlkaWprc3RyYShpKTsKCQlmb3IgKGludCBqID0gMDsgaiA8IFY7ICsraikKCQl7CgkJCWlmIChkW2pdICE9IElOVF9NQVgpCgkJCXsKCQkJCWlmIChkW2pdID4gbWF4aSkKCQkJCQltYXhpID0gZFtqXTsKCQkJfQoJCX0KCX0KCWNvdXQ8PG1heGk7Cn0=