#include<bits/stdc++.h>
using namespace std;
const int N=110,M=1010;
struct edge{int x,y,c,pre;}a[N];int alen,last[N];
void ins(int x,int y,int c){a[++alen]=edge{x,y,c,last[x]};last[x]=alen;}
int d[M];
bool v[M];
int spfa(int st,int ed)
{
memset(d,0,sizeof(d));
memset(v,0,sizeof(v));v[st]=1;
queue<int>q;
q.push(st);
while(!q.empty())
{
int x=q.front();
for(int k=last[x];k;k=a[k].pre)
{
int y=a[k].y;
if(d[y]<d[x]+a[k].c)
{
d[y]=d[x]+a[k].c;
if(v[y]==0) v[y]=1,q.push(y);
}
}
v[x]=0;
q.pop();
}
return d[ed];
}
int main()
{
int n,m;scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
{
int x,y,c;scanf("%d%d%d",&x,&y,&c);
ins(x,y,c);ins(y,x,c);
}
int ans=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
ans=max(ans,spfa(i,j));
printf("%d",ans);
return 0;
}
P1294