#include<bits/stdc++.h>
using namespace std;
#define MAXN 20010
int n,m;
int edge[MAXN][MAXN];
int color[MAXN];
#define WHITE 1
#define BLACK 2
#define reverseColor(x) (x%2+1)
list<int> prepare;
bool check(int budgit)
{
prepare.clear();
memset(color,0,sizeof(color));
color[1]=WHITE;
prepare.push_back(1);
while(prepare.size())
{
int item=prepare.front();
prepare.pop_front();
for(int i=1;i<=n;++i)
{
if(edge[item][i]>=budgit)
{
if(!color[i])
{
color[i]=reverseColor(color[item]);
prepare.push_back(i);
}
else if(color[i]==color[item])return false;
}
}
}
return true;
}
int main()
{
cin>>n>>m;
int maxEdge=-1;
for(int i=1;i<=m;++i)
{
int x,y,z;
cin>>x>>y>>z;
edge[x][y]=edge[y][x]=z;
maxEdge=max(maxEdge,z);
}
int l=0,r=maxEdge+1,budgit=0;
while(l+1<r)
{
budgit=l+r>>2;
if(check(budgit))r=budgit;
else l=budgit;
}
cout<<l;
return 0;
}