//克鲁斯卡尔算法
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
struct edge
{
int a,b,c;
bool operator<(const edge &e)
{
return c<e.c;
}
};
edge e[200001];
int vis[100001];
int find(int i)
{
if(vis[i]==i)
return i;
return vis[i]=find(vis[i]);
}
int merge(int a,int b)
{
int t1=find(a);
int t2=find(b);
if(t1!=t2)
{
vis[t2]=t1;
return 1;
}
return 0;
}
int main(int argc, char** argv)
{
int n,m;
int sum;
cin>>n>>m;
for(int i=1;i<=m;i++)
{
cin>>e[i].a>>e[i].b>>e[i].c;
}
for(int i=1;i<=n;i++)
{
vis[i]=i;
}
sort(e+1,e+1+m);
for(int i=1;i<=m;i++)
{
if(merge(e[i].a,e[i].b))
{
sum=e[i].c;
}
if(find(1)==find(n))
{
break;
}
}
cout<<sum;
return 0;
}