#include<iostream>
#include<algorithm>
#include<vector>
#include<cstring>
const int Max=1e5+1;
using namespace std;
int hatred[Max];
int color[Max];
struct ele{
int to,weight;
ele(int a,int b){
to=a,weight=b;
}
};
vector<ele> v[Max];
void add(int a,int b,int c){
ele tmp(b,c);
v[a].push_back(tmp);
}
int Mid;
void print(int n){
for(int i=1;i<=n;i++){
cout<<color[i]<<" ";
}
cout<<endl;
}
bool dfs(int n,int c){
color[n]=c;
for(auto it=v[n].begin();it!=v[n].end();it++){
if((*it).weight>hatred[Mid]){
if(color[(*it).to]==0){
dfs((*it).to,3-c);
}else{
if(color[(*it).to]==c){
return false;
}
}
}
}
return true;
}
int main(){
int n,m;
cin>>n>>m;
int a,b,c;
for(int i=1;i<=m;i++){
cin>>a>>b>>c;
add(a,b,c);
add(b,a,c);
hatred[i]=c;
}
sort(hatred,hatred+1+m);
int l=0,r=m;
while(l!=r){
Mid=(l+r)/2;
memset(color,0,sizeof(color));
bool flag=false;
for(int i=1;i<=n;i++){
if(color[i]==0){
if(!dfs(i,1)){
flag=true;
break;
}
}
}
if(!flag){
r=Mid;
}else{
l=Mid+1;
}
}
Mid=(l+r)/2;
cout<<hatred[Mid];
}