#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int e[N],h[N],ne[N],w[N],idx=0,n,m;
int st[N];
bool dfs1(int u,int color,int k)
{
st[u]=color;
for(int i=h[u];~i;i=ne[i])
{
int v=e[i],w1=w[i];
if(w1>=k)
{
if(st[v]&&st[u]==st[v]) return false;
if(st[v]&&st[u]==st[v]^1) continue;
bool f=dfs1(v,color^1,k);
if(!f) return false;
}
}
return true;
}
bool check(int k)
{
memset(st,0,sizeof st);
for(int i=1;i<=n;i++)
{
if(st[i]) continue;
bool f=dfs1(i,2,k);
if(!f) return false;
}
return true;
}
inline int read()
{
int x=0,w1=1;char c=getchar();
while(c<'0'||c>'9')
{
if(c=='-') w1=-1;
c=getchar();
}
while(c>='0'&&c<='9')
{
x=(x<<3)+(x<<1)+(c^48);
c=getchar();
}
return x*w1;
}
inline void write(int s)
{
if(s<0) putchar('-'),s*=-1;
if(s>9) write(s/10);
putchar((s%10)^'0');
}
inline void add(int x,int y,int z)
{
e[idx]=y,w[idx]=z,ne[idx]=h[x],h[x]=idx++;
}
int main()
{
int L=0,R=-0x3f;
n=read(),m=read();
memset(h,-1,sizeof h);
for(int i=1;i<=m;i++)
{
int a=read(),b=read(),c=read();
R=max(R,c);
add(a,b,c),add(b,a,c);
}
R++;
while(L+1<R)
{
int mid=(L+R)>>1;
if(check(mid)) R=mid;
else L=mid;
}
write(L);
return 0;
}