#include<bits/stdc++.h>
using namespace std;
const int MAXN=1e3+4;
int f[MAXN];
int getroot(int n){
if(n==f[n])return n;
else return f[n]=getroot(f[n]);
}
void merge(int a,int b){
f[a]=b;
}
struct node{
int x,y,t;
};
bool cmp(node a,node b){
return a.t<b.t;
}
int main(){
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++)f[i]=i;
node a[m];
for(int i=0;i<m;i++)cin>>a[i].x>>a[i].y>>a[i].t;
sort(a,a+m,cmp);
bool flag2=1;
for(int i=0;i<m;i++){
merge(a[i].x,a[i].y);
bool flag=1;
for(int j=1;j<=n;j++){
if(getroot(1)!=getroot(j)){
flag=0;
break;
}
}if(flag){
cout<<a[i].t;
flag2=0;
break;
}
}if(flag2)cout<<-1;
}