#include<bits/stdc++.h>
using namespace std;

//存储一条路连接的两端的编号 以及 修好的时间 
struct node{
	int x,y,t;
}a[100100]; 

int f[1100];//存储村庄之间是否有路的关系描述 

//查:查询元素的根 
int find(int x){
	return f[x]==x?x:f[x]=find(f[x]);
} 

//排序辅助函数:按时间升序 
bool cmp(node n1,node n2){
	return n1.t < n2.t;
} 

int main() {
	int n,m,i;
	cin>>n>>m;
	for(int i = 1;i <= m;i++){
		cin>>a[i].x>>a[i].y>>a[i].t;
	}
	
	//所有数据,按时间升序
	sort(a+1,a+1+m,cmp);
	
	//初始化
	for(int i = 1;i <= n;i++){
		f[i] = i;
	} 
	
	//合并(修路)
	int fx,fy,c = 0;
	for(int i = 1;i <= m;i++){
		fx = find(a[i].x);
		fy = find(a[i].y);
		
		//如果两者之间没有路
		if(fx != fy){
			f[fx] = fy;
			c++;
		} 
		
		if(c == n - 1){
			cout<<a[i].t;
			return 0;
		}
	} 
	 
	cout<<-1;
	return 0;
}
/**************************************************************
	Problem: 1927
	User: admin
	Language: C++
	Result: Accepted
	Time:87 ms
	Memory:3256 kb
****************************************************************/