#include <bits/stdc++.h>
using namespace std;
struct DSU{
int N;
vector<int> v;
DSU (int n):N(n),v(n+1){
for (int i=1 ; i<=n ; i++) v[i] = i;
}
int find(int u){
if (u == v[u]) return u;
return v[u] = find(v[u]);
}
bool unite(int a,int b){
a = find(a),b = find(b);
if (a == b) return false;
v[a] = b;
return true;
}
};
struct Edge{
int u,v,w;
};
bool cmp(Edge &a,Edge &b){
return a.w > b.w;
}
int main(void){
ios::sync_with_stdio(0),cin.tie(0);
int N,M;
while (cin>>N>>M){
int cnt = 0,ans = INT_MAX;
DSU dsu(N);
vector<Edge> edges(M);
for(int i=0; i<M; i++)cin>>edges[i].u>>edges[i].v>>edges[i].w;
sort(edges.begin(),edges.end(),cmp);
for (auto [u,v,w]:edges){
if (!dsu.unite(u,v)) continue;
cnt += 1;
ans = min(ans,w);
if (cnt == N-1) break;
}
cout<<ans<<"\n";
}
}