#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10,inf = 0x3f3f3f3f;
struct node{
int x,y,z;
};
node a[N];
int f[N];
int n,m;
bool cmp(node a,node b)
{
return a.z < b.z;
}
int find(int x)
{
if(f[x] != x) f[x] = find(f[x]);
return f[x];
}
void merge(int x,int y)
{
f[find(y)] = find(x);
}
void kruskal()
{
for(int i = 1; i <= n; i++) f[i] = i;
int sum = 0,ans = 0;
for(int i = 1; i <= m; i++)
{
if(find(a[i].x) != find(a[i].y))
{
sum++;
ans = max(ans,a[i].z);
merge(a[i].x,a[i].y);
if(sum == n - 1)break;
}
}
if(sum != n - 1) cout << -1;
else cout << ans;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i = 1; i <= m; i++) scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].z);
sort(a + 1,a + 1 + m, cmp);
kruskal();
return 0;
}