#54565: 最大生成樹


11430533@stu.tshs.tp.edu.tw (一孝20周定樂)


#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";
    }
}