#include<bits/stdc++.h>
using namespace std;
const int MAXN = 1e5 + 5;
const int M = __lg(MAXN) + 2;
int n, m, ans_maxi;
int h[MAXN], dist[MAXN], par[MAXN];
int P[MAXN][M], Maxi[MAXN][M];
vector<pair<int, int>> g[MAXN];
vector<pair<int, pair<int, int>>> edge;
bool mark[MAXN], vis[MAXN];
int find(int u) {
if (par[u] == u) return u;
return par[u] = find(par[u]);
}
void join(int u, int v) {
int x = find(u);
int y = find(v);
if (x != y) par[x] = y;
}
void DFS(int u) {
vis[u] = true;
for (int i = 1; i < M; i++) {
P[u][i] = P[P[u][i - 1]][i - 1];
Maxi[u][i] = max(Maxi[u][i - 1], Maxi[P[u][i - 1]][i - 1]);
}
for (int i = 0; i < g[u].size(); i++) {
int v = g[u][i].first;
int w = g[u][i].second;
if (!vis[v]) {
h[v] = h[u] + 1;
Maxi[v][0] = w;
P[v][0] = u;
DFS(v);
}
}
}
int LCA(int u, int v) {
ans_maxi = 0;
if (h[u] < h[v]) swap(u, v);
int x = h[u] - h[v];
for (int i = __lg(x); i >= 0; i--) {
if (x >= (1 << i)) {
ans_maxi = max(ans_maxi, Maxi[u][i]);
u = P[u][i];
x -= (1 << i);
}
}
if (u == v) return u;
for (int i = __lg(h[u]); i >= 0; i--) {
if (P[u][i] != P[v][i]) {
ans_maxi = max({ans_maxi, Maxi[u][i], Maxi[v][i]});
u = P[u][i];
v = P[v][i];
}
}
ans_maxi = max({ans_maxi, Maxi[u][0], Maxi[v][0]});
return P[u][0];
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n >> m;
for (int i = 1; i <= m; i++) {
int u, v, w;
cin >> u >> v >> w;
edge.push_back({w, {u, v}});
}
sort(edge.begin(), edge.end(), greater<>());
for (int i = 1; i <= n; i++) par[i] = i;
for (int id = 0; id < edge.size(); id++) {
int u = edge[id].second.first;
int v = edge[id].second.second;
int w = edge[id].first;
if (find(u) != find(v)) {
mark[id] = true;
join(u, v);
g[u].push_back({v, w});
g[v].push_back({u, w});
}
}
for (int i = 1; i <= n; i++) {
if (!vis[i]) DFS(i);
}
int ans = 0;
for (int id = 0; id < edge.size(); id++) {
if (!mark[id]) {
int w = edge[id].first;
int u = edge[id].second.first;
int v = edge[id].second.second;
LCA(u, v);
ans = max(ans, w + ans_maxi);
}
}
cout << ans;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNvbnN0IGludCBNQVhOID0gMWU1ICsgNTsKY29uc3QgaW50IE0gPSBfX2xnKE1BWE4pICsgMjsKaW50IG4sIG0sIGFuc19tYXhpOwppbnQgaFtNQVhOXSwgZGlzdFtNQVhOXSwgcGFyW01BWE5dOwppbnQgUFtNQVhOXVtNXSwgTWF4aVtNQVhOXVtNXTsKdmVjdG9yPHBhaXI8aW50LCBpbnQ+PiBnW01BWE5dOwp2ZWN0b3I8cGFpcjxpbnQsIHBhaXI8aW50LCBpbnQ+Pj4gZWRnZTsKYm9vbCBtYXJrW01BWE5dLCB2aXNbTUFYTl07CgppbnQgZmluZChpbnQgdSkgewogICAgaWYgKHBhclt1XSA9PSB1KSByZXR1cm4gdTsKICAgIHJldHVybiBwYXJbdV0gPSBmaW5kKHBhclt1XSk7Cn0KCnZvaWQgam9pbihpbnQgdSwgaW50IHYpIHsKICAgIGludCB4ID0gZmluZCh1KTsKICAgIGludCB5ID0gZmluZCh2KTsKICAgIGlmICh4ICE9IHkpIHBhclt4XSA9IHk7Cn0KCnZvaWQgREZTKGludCB1KSB7CiAgICB2aXNbdV0gPSB0cnVlOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPCBNOyBpKyspIHsKICAgICAgICBQW3VdW2ldID0gUFtQW3VdW2kgLSAxXV1baSAtIDFdOwogICAgICAgIE1heGlbdV1baV0gPSBtYXgoTWF4aVt1XVtpIC0gMV0sIE1heGlbUFt1XVtpIC0gMV1dW2kgLSAxXSk7CiAgICB9CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGdbdV0uc2l6ZSgpOyBpKyspIHsKICAgICAgICBpbnQgdiA9IGdbdV1baV0uZmlyc3Q7CiAgICAgICAgaW50IHcgPSBnW3VdW2ldLnNlY29uZDsKICAgICAgICBpZiAoIXZpc1t2XSkgewogICAgICAgICAgICBoW3ZdID0gaFt1XSArIDE7CiAgICAgICAgICAgIE1heGlbdl1bMF0gPSB3OwogICAgICAgICAgICBQW3ZdWzBdID0gdTsKICAgICAgICAgICAgREZTKHYpOwogICAgICAgIH0KICAgIH0KfQoKaW50IExDQShpbnQgdSwgaW50IHYpIHsKICAgIGFuc19tYXhpID0gMDsKICAgIGlmIChoW3VdIDwgaFt2XSkgc3dhcCh1LCB2KTsKICAgIGludCB4ID0gaFt1XSAtIGhbdl07CiAgICBmb3IgKGludCBpID0gX19sZyh4KTsgaSA+PSAwOyBpLS0pIHsKICAgICAgICBpZiAoeCA+PSAoMSA8PCBpKSkgewogICAgICAgICAgICBhbnNfbWF4aSA9IG1heChhbnNfbWF4aSwgTWF4aVt1XVtpXSk7CiAgICAgICAgICAgIHUgPSBQW3VdW2ldOwogICAgICAgICAgICB4IC09ICgxIDw8IGkpOwogICAgICAgIH0KICAgIH0KICAgIGlmICh1ID09IHYpIHJldHVybiB1OwogICAgZm9yIChpbnQgaSA9IF9fbGcoaFt1XSk7IGkgPj0gMDsgaS0tKSB7CiAgICAgICAgaWYgKFBbdV1baV0gIT0gUFt2XVtpXSkgewogICAgICAgICAgICBhbnNfbWF4aSA9IG1heCh7YW5zX21heGksIE1heGlbdV1baV0sIE1heGlbdl1baV19KTsKICAgICAgICAgICAgdSA9IFBbdV1baV07CiAgICAgICAgICAgIHYgPSBQW3ZdW2ldOwogICAgICAgIH0KICAgIH0KICAgIGFuc19tYXhpID0gbWF4KHthbnNfbWF4aSwgTWF4aVt1XVswXSwgTWF4aVt2XVswXX0pOwogICAgcmV0dXJuIFBbdV1bMF07Cn0KCmludCBtYWluKCkgewogICAgaW9zOjpzeW5jX3dpdGhfc3RkaW8oMCk7CiAgICBjaW4udGllKDApOwogICAgY2luID4+IG4gPj4gbTsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG07IGkrKykgewogICAgICAgIGludCB1LCB2LCB3OwogICAgICAgIGNpbiA+PiB1ID4+IHYgPj4gdzsKICAgICAgICBlZGdlLnB1c2hfYmFjayh7dywge3UsIHZ9fSk7CiAgICB9CiAgICBzb3J0KGVkZ2UuYmVnaW4oKSwgZWRnZS5lbmQoKSwgZ3JlYXRlcjw+KCkpOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSBwYXJbaV0gPSBpOwogICAgZm9yIChpbnQgaWQgPSAwOyBpZCA8IGVkZ2Uuc2l6ZSgpOyBpZCsrKSB7CiAgICAgICAgaW50IHUgPSBlZGdlW2lkXS5zZWNvbmQuZmlyc3Q7CiAgICAgICAgaW50IHYgPSBlZGdlW2lkXS5zZWNvbmQuc2Vjb25kOwogICAgICAgIGludCB3ID0gZWRnZVtpZF0uZmlyc3Q7CiAgICAgICAgaWYgKGZpbmQodSkgIT0gZmluZCh2KSkgewogICAgICAgICAgICBtYXJrW2lkXSA9IHRydWU7CiAgICAgICAgICAgIGpvaW4odSwgdik7CiAgICAgICAgICAgIGdbdV0ucHVzaF9iYWNrKHt2LCB3fSk7CiAgICAgICAgICAgIGdbdl0ucHVzaF9iYWNrKHt1LCB3fSk7CiAgICAgICAgfQogICAgfQogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSB7CiAgICAgICAgaWYgKCF2aXNbaV0pIERGUyhpKTsKICAgIH0KICAgIGludCBhbnMgPSAwOwogICAgZm9yIChpbnQgaWQgPSAwOyBpZCA8IGVkZ2Uuc2l6ZSgpOyBpZCsrKSB7CiAgICAgICAgaWYgKCFtYXJrW2lkXSkgewogICAgICAgICAgICBpbnQgdyA9IGVkZ2VbaWRdLmZpcnN0OwogICAgICAgICAgICBpbnQgdSA9IGVkZ2VbaWRdLnNlY29uZC5maXJzdDsKICAgICAgICAgICAgaW50IHYgPSBlZGdlW2lkXS5zZWNvbmQuc2Vjb25kOwogICAgICAgICAgICBMQ0EodSwgdik7CiAgICAgICAgICAgIGFucyA9IG1heChhbnMsIHcgKyBhbnNfbWF4aSk7CiAgICAgICAgfQogICAgfQogICAgY291dCA8PCBhbnM7Cn0K