#include<cstdio>
#include<algorithm>
using namespace std;
int n,m,a[20010];
struct R{int x,y,c;}r[100010];
bool cmp(R &A,R &B){return A.c>B.c;}
void swa(register int i,register int j)
{
register int xx=r[i].x,yy=r[i].y,cc=r[i].c;
r[i].x=r[j].x,r[i].y=r[j].y,r[i].c=r[j].c;
r[j].x=xx,r[j].y=yy,r[j].c==cc;
}
int main()
{
scanf("%d%d",&n,&m);
for(register int i=1;i<=m;i++)
scanf("%d%d%d",&r[i].x,&r[i].y,&r[i].c);
if(m==1){printf("0\n");return 0;}
sort(r+1,r+m+1,cmp);
a[r[1].x]=1,a[r[1].y]=2;
for(register int i=2;i<=m;i++)
{
register int xx=r[i].x,yy=r[i].y;
if(a[xx]==a[yy]&&a[xx]){printf("%d\n",r[i].c);return 0;}
if(a[xx]&&!a[yy]) a[yy]=a[xx]==1?2:1;
else if(!a[xx]&&a[yy]) a[xx]=a[yy]==1?2:1;
else if(!a[xx]&&!a[yy])
{
register int p=i+1;
while(!a[r[p].x]&&!a[r[p].y]&&p<=m) p++;
if(p==m+1) a[xx]=1,a[yy]=2;
else{for(register int j=i;j<p;j++) swa(j,p);i--;}
}
}
printf("0\n");return 0;
}