#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
const int M = 3e5 + 5;
const int LOG = 20;
struct E { int u, v, w; } e[M];
struct Node { int v, w; };
vector<Node> a[N];
int p[N], d[N], g[LOG][N], m[LOG][N], s[LOG][N];
bool t[M];
long long S;
int f(int x)
{
return p[x] == x ? x : p[x] = f(p[x]);
}
void bfs(int r)
{
queue<int> q;
q.push(r);
d[r] = 0;
g[0][r] = -1;
m[0][r] = s[0][r] = -1;
while (!q.empty())
{
int u = q.front();
q.pop();
for (int i = 0; i < a[u].size(); i++)
{
int v = a[u][i].v;
int w = a[u][i].w;
if (g[0][u] != v)
{
d[v] = d[u] + 1;
g[0][v] = u;
m[0][v] = w;
s[0][v] = -1;
q.push(v);
}
}
}
}
void init(int n)
{
for (int k = 1; k < LOG; k++)
{
for (int i = 0; i < n; i++)
{
if (g[k-1][i] == -1)
{
g[k][i] = -1;
m[k][i] = -1;
s[k][i] = -1;
}
else
{
int p = g[k-1][i];
g[k][i] = g[k-1][p];
vector<int> c;
if (m[k-1][i] != -1) c.push_back(m[k-1][i]);
if (s[k-1][i] != -1) c.push_back(s[k-1][i]);
if (m[k-1][p] != -1) c.push_back(m[k-1][p]);
if (s[k-1][p] != -1) c.push_back(s[k-1][p]);
sort(c.rbegin(), c.rend());
c.erase(unique(c.begin(), c.end()), c.end());
m[k][i] = c.empty() ? -1 : c[0];
s[k][i] = c.size() < 2 ? -1 : c[1];
}
}
}
}
void mg(int a1, int a2, int b1, int b2, int &mx, int &sc)
{
vector<int> c;
if (a1 != -1) c.push_back(a1);
if (a2 != -1) c.push_back(a2);
if (b1 != -1) c.push_back(b1);
if (b2 != -1) c.push_back(b2);
sort(c.rbegin(), c.rend());
c.erase(unique(c.begin(), c.end()), c.end());
mx = c.empty() ? -1 : c[0];
sc = c.size() < 2 ? -1 : c[1];
}
void q(int u, int v, int &mx, int &sc)
{
mx = -1;
sc = -1;
if (u == v) return;
int a = -1, b = -1;
if (d[u] < d[v]) swap(u, v);
for (int k = LOG - 1; k >= 0; k--)
{
if (d[u] - (1 << k) >= d[v])
{
int x, y;
mg(a, b, m[k][u], s[k][u], x, y);
a = x;
b = y;
u = g[k][u];
}
}
if (u == v)
{
mx = a;
sc = b;
return;
}
for (int k = LOG - 1; k >= 0; k--)
{
if (g[k][u] != -1 && g[k][u] != g[k][v])
{
int x, y;
mg(a, b, m[k][u], s[k][u], x, y);
a = x;
b = y;
mg(a, b, m[k][v], s[k][v], x, y);
a = x;
b = y;
u = g[k][u];
v = g[k][v];
}
}
int x, y;
mg(a, b, m[0][u], s[0][u], x, y);
a = x;
b = y;
mg(a, b, m[0][v], s[0][v], x, y);
a = x;
b = y;
mx = a;
sc = b;
}
int main()
{
int n, nt;
scanf("%d%d", &n, &nt);
for (int i = 0; i < nt; i++)
{
scanf("%d%d%d", &e[i].u, &e[i].v, &e[i].w);
e[i].u--;
e[i].v--;
}
sort(e, e + nt, [](E a, E b) { return a.w < b.w; });
for (int i = 0; i < n; i++)
{
p[i] = i;
}
for (int i = 0; i < nt; i++)
{
int u = e[i].u;
int v = e[i].v;
int w = e[i].w;
if (f(u) != f(v))
{
p[f(u)] = f(v);
S += w;
t[i] = 1;
a[u].push_back({v, w});
a[v].push_back({u, w});
}
}
bfs(0);
init(n);
long long ans = 1e18;
for (int i = 0; i < nt; i++)
{
if (!t[i])
{
int u = e[i].u;
int v = e[i].v;
int w = e[i].w;
int mx, sc;
q(u, v, mx, sc);
if (mx < w)
{
ans = min(ans, S - mx + w);
}
else if (sc != -1 && sc < w)
{
ans = min(ans, S - sc + w);
}
}
}
printf("%lld\n", ans);
return 0;
}