#include <bits/stdc++.h>
using namespace std;
#define ii pair<int, int>
#define inf 10000000
vector<int> dist;
void Djikstra(vector<vector<ii> > &graph, int src){
set <ii> S;
S.insert({0, src});
dist[src] = 0;
while(!S.empty()){
int u = S.begin()->second;
S.erase(S.begin());
for(auto it : graph[u]){
int v = it.first, d = it.second;
if(dist[v] > dist[u] + d){
if(dist[v] != inf){
S.erase(S.find({dist[v], v}));
}
dist[v] = dist[u] + d;
S.insert({dist[v], v});
}
}
}
}
int main(void){
ios::sync_with_stdio(0); cin.tie(0);
int c, f;
cin >> c >> f;
vector<vector<ii> > graph(c+1, vector<ii>(0));
while(f--){
int x, y, w;
cin >> x >> y >> w;
graph[x].push_back({y, w});
graph[y].push_back({x, w});
}
int ans = 0;
for(int i = 1; i <= c; i++){
dist.clear(); dist.resize(c+1, inf);
Djikstra(graph, i);
for(int j = 1; j <= c; j++){
if(dist[j] != inf){
ans = max(ans, dist[j]);
}
}
}
cout << ans << '\n';
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgaWkgcGFpcjxpbnQsIGludD4KI2RlZmluZSBpbmYgMTAwMDAwMDAKdmVjdG9yPGludD4gZGlzdDsKdm9pZCBEamlrc3RyYSh2ZWN0b3I8dmVjdG9yPGlpPiA+ICZncmFwaCwgaW50IHNyYyl7CglzZXQgPGlpPiBTOwoJUy5pbnNlcnQoezAsIHNyY30pOwoJZGlzdFtzcmNdID0gMDsKCXdoaWxlKCFTLmVtcHR5KCkpewoJCWludCB1ID0gUy5iZWdpbigpLT5zZWNvbmQ7CgkJUy5lcmFzZShTLmJlZ2luKCkpOwoJCWZvcihhdXRvIGl0IDogZ3JhcGhbdV0pewoJCQlpbnQgdiA9IGl0LmZpcnN0LCBkID0gaXQuc2Vjb25kOwoJCQlpZihkaXN0W3ZdID4gZGlzdFt1XSArIGQpewoJCQkJaWYoZGlzdFt2XSAhPSBpbmYpewoJCQkJCVMuZXJhc2UoUy5maW5kKHtkaXN0W3ZdLCB2fSkpOwoJCQkJfQoJCQkJZGlzdFt2XSA9IGRpc3RbdV0gKyBkOwoJCQkJUy5pbnNlcnQoe2Rpc3Rbdl0sIHZ9KTsKCQkJfQoJCX0KCX0KfQoKaW50IG1haW4odm9pZCl7Cglpb3M6OnN5bmNfd2l0aF9zdGRpbygwKTsgY2luLnRpZSgwKTsKCWludCBjLCBmOwoJY2luID4+IGMgPj4gZjsKCXZlY3Rvcjx2ZWN0b3I8aWk+ID4gZ3JhcGgoYysxLCB2ZWN0b3I8aWk+KDApKTsKCXdoaWxlKGYtLSl7CgkJaW50IHgsIHksIHc7CgkJY2luID4+IHggPj4geSA+PiB3OwoJCWdyYXBoW3hdLnB1c2hfYmFjayh7eSwgd30pOwoJCWdyYXBoW3ldLnB1c2hfYmFjayh7eCwgd30pOwoJfQoJaW50IGFucyA9IDA7Cglmb3IoaW50IGkgPSAxOyBpIDw9IGM7IGkrKyl7CgkJZGlzdC5jbGVhcigpOyBkaXN0LnJlc2l6ZShjKzEsIGluZik7CgkJRGppa3N0cmEoZ3JhcGgsIGkpOwoJCWZvcihpbnQgaiA9IDE7IGogPD0gYzsgaisrKXsKCQkJaWYoZGlzdFtqXSAhPSBpbmYpewoJCQkJYW5zID0gbWF4KGFucywgZGlzdFtqXSk7CgkJCX0KCQl9Cgl9Cgljb3V0IDw8IGFucyA8PCAnXG4nOwp9Cg==