#include<bits/stdc++.h>
using namespace std;
#define SIZE 1<<18
char ibuf[SIZE],*is=ibuf,*it=ibuf;
#define getchar() (is==it&&(it=(is=ibuf)+fread(ibuf,1,SIZE,stdin),is==it)?EOF:*is++)
inline void read(int &a){
int x=0,y=0,ch=getchar();
while(!isdigit(ch)&&ch!=EOF)y|=(ch=='-'),ch=getchar();
while(isdigit(ch))x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
a=y?-x:x;
}
int ans,n,m,fa[10010],tot;
struct edge{
int u,v,t;
}e[10010];
inline bool cmp(edge a,edge b){
return a.t<b.t;
}
inline int find(int x){
return fa[x]=(fa[x]^x)?find(fa[x]):x;
}
inline void merge(int x,int y){
fa[find(x)]=find(y);
}
int main(){
read(n);read(m);
for(int i=1;i<=n;++i)fa[i]=i;
int x,y,t;
for(int i=1;i<=m;++i){
read(x);read(y);read(t);
e[i]={x,y,t};
}
stable_sort(e+1,e+m+1,cmp);
for(int i=1;i<=m;++i){
int u=e[i].u,v=e[i].v;
if(find(u)^find(v)){
merge(u,v);
++tot;
ans=e[i].t;
if(tot==n-1){
printf("%d",ans);
return 0;
}
}
}
puts("-1");
return 0;
}