#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
#include<vector>
#include<map>
using namespace std;
#define mem(a,b) memset(a,b,sizeof(a))
#define INF 0x3fffffff
#define ll long long
#define rg register int
inline int read()
{
char ch=getchar();int x=0,cf=1;
while(ch<'0'||ch>'9'){if(ch=='-')cf=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
return x*cf;
}
struct node
{
int a,b,c;
}con[101000];
int n,m;
int fa[20001<<1];
bool cmp(node a,node b)
{
return a.c>b.c;
}
int find(int x)
{
if(fa[x]==x)
return x;
fa[x]=find(fa[x]);
return fa[x];
}
int main()
{
n=read(),m=read();
for(rg i=1;i<=n;i++)
{
fa[i]=i,fa[i+n]=i+n;
}
for(rg i=1;i<=m;i++)
{
con[i].a=read(),con[i].b=read(),con[i].c=read();
}
sort(con+1,con+m+1,cmp);
for(rg i=1;i<=m;i++)
{
if(find(con[i].a)==find(con[i].b)||find(con[i].a+n)==find(con[i].b+n))
{
cout<<con[i].c<<endl;
return 0;
}
fa[fa[con[i].a+n]]=fa[con[i].b];
fa[fa[con[i].b]]=fa[con[i].a+n];
}
cout<<"0"<<endl;
return 0;
}