#include <bits/stdc++.h>
using namespace std;
int vis[100005];
struct node{
int x;
int y;
int v;
};
int findx(int x)
{
int r = x;
while(r != vis[r])
r = vis[r];
int k = x, tmp;
while(k != r){
tmp = vis[k];
vis[k] = r;
k = tmp;
}
return r;
}
int marge(int a, int b){
int x = findx(a);
int y = findx(b);
if(x != y){
vis[y] = x;
return -1;
}
return 0;
}
int cmp(node a, node b){
return a.v < b.v;
}
int main()
{
ios::sync_with_stdio(false);
int n, m;
while(cin >> n >> m){
vector<node> ve;
for(int i = 1; i <= n; i++) vis[i] = i;
for(int i = 1; i <= m; i++){
int a, b, c;
cin >> a >> b >> c;
ve.push_back(node{a, b, c});
}
sort(ve.begin(), ve.end(), cmp);
for(int i = 0; i < m; i++){
n += marge(ve[i].x, ve[i].y);
//cout << n << endl;
if(n == 1){
cout << ve[i].v << endl;
break;
}
}
if(n != 1){
cout << -1 << endl;
}
}
return 0;
}