#include <bits/stdc++.h>
using namespace std;
struct E {
int a, b, c;
bool u;
bool operator<(const E& o) const {
return c < o.c;
}
};
vector<int> p;
int f(int x) {
if (p[x] != x) p[x] = f(p[x]);
return p[x];
}
int main() {
freopen("secmst.in", "r", stdin);
freopen("secmst.out", "w", stdout);
int N, M;
cin >> N >> M;
vector<E> e(M);
for (int i = 0; i < M; ++i) {
cin >> e[i].a >> e[i].b >> e[i].c;
e[i].u = false;
}
sort(e.begin(), e.end());
p.resize(N + 1);
for (int i = 1; i <= N; ++i) {
p[i] = i;
}
long long m = 0;
vector<E> t;
for (int i = 0; i < M; ++i) {
int u = f(e[i].a);
int v = f(e[i].b);
if (u != v) {
p[v] = u;
m += e[i].c;
e[i].u = true;
t.push_back(e[i]);
}
}
long long s = LONG_LONG_MAX;
for (int i = 0; i < t.size(); ++i) {
p.assign(N + 1, 0);
for (int j = 1; j <= N; ++j) {
p[j] = j;
}
long long cur = 0;
int cnt = 0;
for (int j = 0; j < M; ++j) {
if (e[j].a == t[i].a && e[j].b == t[i].b && e[j].c == t[i].c) {
continue;
}
int u = f(e[j].a);
int v = f(e[j].b);
if (u != v) {
p[v] = u;
cur += e[j].c;
cnt++;
}
}
if (cnt == N - 1 && cur > m) {
if (cur < s) s = cur;
}
}
cout << s << endl;
return 0;
}