#include <bits/stdc++.h>
using namespace std ;
struct Edge{
int x ;
int y ;
int ang ;
}edge[200005] ;
int fa[400005] , enemy[400005] , n , m ;
bool cmp(Edge a , Edge b){
return a.ang > b.ang ;
}
int find_root( int x ){
if( fa[x] == x ){
return x ;
}
return fa[x] = find_root( fa[x] );
}
void make_together( int x , int y ){
fa[find_root(x)] = find_root(y) ;
return ;
}
int main(){
scanf("%d%d" , &n , &m );
for( int i = 1; i <= m ; i ++ ){
scanf("%d%d%d" , &edge[i].x , &edge[i].y , &edge[i].ang );
}
for( int i = 1 ; i <= n*2 ; i ++ ){
fa[i] = i ;
enemy[i] = 0 ;
}
sort(edge+1,edge+m+1,cmp) ;
for( int i = 1 ; i <= m ; i ++ ){
//由于排序后单调性,首先出现的不满足的一定是最大的不满足的
//所以可以直接输出
if( find_root(edge[i].x) == find_root(edge[i].y)){
printf("%d" , edge[i].ang );
return 0 ;
}
if( enemy[edge[i].x] == 0){
enemy[edge[i].x] = edge[i].y ;
}else{
make_together( edge[i].x , enemy[edge[i].y]) ;
}
if( enemy[edge[i].y] == 0){
enemy[edge[i].y] = edge[i].x ;
}else{
make_together( edge[i].y , enemy[edge[i].x]) ;
}
}
printf("0\n");
return 0 ;
}
感谢aker!!!好人一生平安