code:
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 100;
struct edge
{
int u, v;
int val;
} eset[N];
int n, m, a[N / 5], b[N / 5];
int find(int x) { return a[x] == x ? x : a[x] = find(a[x]); }
void merge(int p, int b) { a[find(p)] = find(b); }
bool check(int x, int y) { return find(x) == find(y); }
bool cmp(edge x, edge y) { return x.val > y.val; }
int main()
{
cin >> n >> m;
for (int i = 1; i < N / 5 - 1; i++)
a[i] = i;
for (int i = 1; i <= m; i++)
cin >> eset[i].u >> eset[i].v >> eset[i].val;
sort(eset + 1, eset + n + 1, cmp);
for (int i = 1; i <= m + 1; i++)
{
if (check(eset[i].u, eset[i].v))
{
cout << eset[i].val;
break;
}
else
{
if (!b[eset[i].u])
b[eset[i].u] = eset[i].v;
else
merge(b[eset[i].u], eset[i].v);
if (!b[eset[i].v])
b[eset[i].v] = eset[i].u;
else
merge(b[eset[i].v], eset[i].u);
}
}
return 0;
}