#include<bits/stdc++.h>
using namespace std ;
#define F first
#define S second
#define g0 get<0>
#define g1 get<1>
#define g2 get<2>
const int N = 1e5+5 ;
const int M = 2e5+5 ;
const int Q = 2e5+5 ;
int n , m , par[N+M] , anc[N+M][(int)log2(N+M)+5] , maxi[N+M] , flag[N+M] , deep[N+M] ;
vector<int> nei[N+M] , nei1[N+M] ;
int p(int k){
if(par[k]<0) return k ;
else return par[k]=p(par[k]) ;
}
void dfs(int node){
for(int i:nei[node]){
deep[i]=deep[node]+1 ;
dfs(i) ;
}
}
void init(int n1 , int m1 , vector<int> u , vector<int> v , vector<int> w){
n = n1 , m = m1 ;
vector<tuple<int,int,int>> vt ;
for(int i=0 ; i<m ; i++){
vt.push_back({w[i],u[i],v[i]}) ;
}
sort(vt.begin(),vt.end()) ;
memset(anc,-1,sizeof(anc)) ;
memset(par,-1,sizeof(par)) ;
for(int i=0 ; i<m ; i++){
int w = g0(vt[i]) , pu = p(g1(vt[i])) , pv = p(g2(vt[i])) ;
anc[pu][0]=anc[pv][0]=n+i ;
if(pu==pv) nei[n+i].push_back(pu) , flag[n+i]=1 ;
else{
nei[n+i].push_back(pu) , nei[n+i].push_back(pv) ;
if(flag[pu] || flag[pv]) flag[n+i]=1 ;
else if(nei1[g1(vt[i])].size()>1 || nei1[g2(vt[i])].size()>1) flag[n+i]=1 ;
}
nei1[g1(vt[i])].push_back(g2(vt[i])) ; nei1[g2(vt[i])].push_back(g1(vt[i])) ;
maxi[n+i]=max({maxi[pu],maxi[pv],w}) ;
par[n+i]=par[pu]+par[pv] ;
par[pu]=par[pv]=n+i ;
}
for(int j=1 ; j<=log2(n+m)+1 ; j++){
for(int i=0 ; i<n+m ; i++) anc[i][j]=anc[anc[i][j-1]][j-1] ;
}
dfs(n+m-1) ;
}
int flca(int a , int b){
if(deep[a]<deep[b]) swap(a,b) ;
int diff = deep[a]-deep[b] ;
for(int i=0 ; i<=log2(n+m)+1 ; i++){
if((diff>>i)&1) a=anc[a][i] ;
}
if(a==b && flag[a]) return a ;
for(int i=log2(n+m)+1 ; i>=0 ; i--){
if(anc[a][i]!=anc[b][i] || (anc[a][i]!=-1 && !flag[anc[a][i]])) a=anc[a][i] , b=anc[b][i] ;
}
return anc[a][0] ;
}
int getMinimumFuelCapacity(int x , int y){
int lca = flca(x,y) ;
if(lca==-1) return -1 ;
return maxi[lca] ;
}
/*
int main(){
// init(3, 2, {0, 0}, {1, 2}, {5, 6}) ; cout << getMinimumFuelCapacity(1, 2) << '\n' ;
init(5, 6, {0, 0, 1, 1, 1, 2}, {1, 2, 2, 3, 4, 3}, {4, 4, 1, 2, 10, 3}) ;
cout << getMinimumFuelCapacity(1, 2) << ' ' << getMinimumFuelCapacity(2, 4) << ' ' << getMinimumFuelCapacity(0, 1) << '\n' ;
return 0 ;
}
*/