Skip to content
c++
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 500005, M = 2000005;  // M 开至无向边数的 2 倍以上
int n, m;
struct Edge {
    int u, v, w;
} e[M];
int head[N], to[M], nxt[M], w[M], cnt = 2;
int dfn[N], low[N], tot;
int stk[N], top;
int bel[N], ebcc_cnt;

int dist[N],ecnt,diameter;
void add(int u, int v, int t = 0) { to[cnt] = v, nxt[cnt] = head[u], w[cnt] = t, head[u] = cnt++; }
void tarjan(int u, int in_edge) {
    dfn[u] = low[u] = ++tot;
    stk[++top] = u;
    for (int i = head[u]; i; i = nxt[i]) {
        if (i == (in_edge ^ 1)) continue;
        int v = to[i];
        if (!dfn[v]) {
            tarjan(v, i);
            low[u] = min(low[u], low[v]);
        } else {
            low[u] = min(low[u], dfn[v]);
        }
    }
    if (dfn[u] == low[u]) {
        ++ebcc_cnt;
        do {
            bel[stk[top]] = ebcc_cnt;
        } while (stk[top--] != u);
    }
}
void cand() {
    cnt = 2;
    for (int i = 1; i <= ebcc_cnt; i++) head[i] = 0;

    for (int i = 0; i < m; i++) {
        int u = bel[e[i].u], v = bel[e[i].v];
        if (u == v) continue;
        add(u, v, e[i].w), add(v, u, e[i].w);
    }
}

void dfs(int u,int f,int limit){
    for(int i=head[u];i;i=nxt[i]){
        int v=to[i];
        if(v==f)continue;
        dfs(v,u,limit);
        int k=(w[i]<=limit?1:0);
        ecnt+=k;
        diameter=std::max(diameter,dist[u]+dist[v]+k);
        dist[u]=std::max(dist[u],dist[v]+k);
    }
}

bool check(int limit){
    for(int i=1;i<=ebcc_cnt;i++)dist[i]=0;
    ecnt=diameter=0;
    dfs(1,0,limit);
    return diameter<ecnt;
}

int com(){
    int l=-1,r=100001;
    while(l+1<r){
        int mid=(l+r)>>1;
        if(check(mid))r=mid;
        else l=mid;
    }
    return r==100001?-1:r;
}
void fc() {
    std::cin >> n >> m;
    for (int i = 0; i < m; i++) {
        std::cin >> e[i].u >> e[i].v >> e[i].w;
        add(e[i].u, e[i].v,e[i].w);
        add(e[i].v, e[i].u,e[i].w);
    }
    tarjan(1, 0);
    cand();

    std::cout<<com();
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int t = 1;
    // std::cin>>t;
    while (t--) fc();
    return 0;
}