#include <bits/stdc++.h>
using namespace std;
struct _ { ios_base::Init _i; _() { cin.sync_with_stdio(0); cin.tie(0); } } _;
#define endl '\n'
#define int intmax_t
#define in(x) for (auto& i: x)
#define test int _t; cin >> _t; for (int i=1; i<=_t; i++) {
signed main()
{
int v, e, ans=INTMAX_MIN;
cin >> v >> e;
int g[v+1][v+1];
for (int i=1; i<=v; i++)
for (int j=1; j<=v; j++)
g[i][j]=INTMAX_MAX;
for (int i=0; i<e; i++)
{
int x, y, p;
cin >> x >> y >> p;
g[x][y]=g[y][x]=p;
}
for (int i=1; i<=v; i++)
for (int j=1; j<=v; j++)
for (int k=1; k<=v; k++)
g[j][k]=min(g[j][k], g[j][i]+g[i][k]);
for (int i=1; i<=v; i++)
for (int j=1; j<=v; j++)
if (g[i][j]!=INTMAX_MAX && i!=j)
ans=max(ans, g[i][j]);
cout << ans;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnN0cnVjdCBfIHsgaW9zX2Jhc2U6OkluaXQgX2k7IF8oKSB7IGNpbi5zeW5jX3dpdGhfc3RkaW8oMCk7IGNpbi50aWUoMCk7IH0gfSBfOwoKI2RlZmluZSBlbmRsICdcbicKI2RlZmluZSBpbnQgaW50bWF4X3QKI2RlZmluZSBpbih4KSBmb3IgKGF1dG8mIGk6IHgpCiNkZWZpbmUgdGVzdCBpbnQgX3Q7IGNpbiA+PiBfdDsgZm9yIChpbnQgaT0xOyBpPD1fdDsgaSsrKSB7CgpzaWduZWQgbWFpbigpCnsKCWludCB2LCBlLCBhbnM9SU5UTUFYX01JTjsKCWNpbiA+PiB2ID4+IGU7CglpbnQgZ1t2KzFdW3YrMV07Cglmb3IgKGludCBpPTE7IGk8PXY7IGkrKykKCQlmb3IgKGludCBqPTE7IGo8PXY7IGorKykKCQkJZ1tpXVtqXT1JTlRNQVhfTUFYOwoJZm9yIChpbnQgaT0wOyBpPGU7IGkrKykKCXsKCQlpbnQgeCwgeSwgcDsKCQljaW4gPj4geCA+PiB5ID4+IHA7CgkJZ1t4XVt5XT1nW3ldW3hdPXA7Cgl9Cglmb3IgKGludCBpPTE7IGk8PXY7IGkrKykKCQlmb3IgKGludCBqPTE7IGo8PXY7IGorKykKCQkJZm9yIChpbnQgaz0xOyBrPD12OyBrKyspCgkJCQlnW2pdW2tdPW1pbihnW2pdW2tdLCBnW2pdW2ldK2dbaV1ba10pOwoJZm9yIChpbnQgaT0xOyBpPD12OyBpKyspCgkJZm9yIChpbnQgaj0xOyBqPD12OyBqKyspCgkJCWlmIChnW2ldW2pdIT1JTlRNQVhfTUFYICYmIGkhPWopCgkJCQlhbnM9bWF4KGFucywgZ1tpXVtqXSk7Cgljb3V0IDw8IGFuczsKfQ==