#include <bits/stdc++.h>
using namespace std;
int n, m;
set<int> s1, s2;
struct node {
int a, b, c;
} f[100005];
bool cmp(node a, node b) {
return a.c > b.c;
}
int main () {
// freopen("P1525_2.in","r",stdin);
// freopen(".out","w",stdout);
cin >> n >> m;
for (int i = 1; i <= m; i++)
cin >> f[i].a >> f[i].b >> f[i].c;
sort(f + 1, f + 1 + n, cmp);
for (int i = 1; i <= m; i++) {
//判断是否属于一个集合,是——退出,不是或未进集合——插入不同集合
if (s1.count(f[i].a)) {
if (s1.count(f[i].b)) {
cout << f[i].c << endl;
return 0;
} else if (!s2.count(f[i].b)) {
s2.insert(f[i].b);
}
} else {
if (s2.count(f[i].a)) { /*s2.a true*/
if (s2.count(f[i].b)) {
cout << f[i].c << endl;
return 0;
} else if (!s1.count(f[i].b)) {
s1.insert(f[i].b);
}
} else { /*s1.a not,s2.a not*/
if (s1.count(f[i].b)) {
s2.insert(f[i].a);
} else if (s2.count(f[i].b)) {
s1.insert(f[i].a);
} else {
s1.insert(f[i].a);
s2.insert(f[i].b);
}
}
}
}
cout << 0 << endl;
return 0;
}