#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
using namespace std;
const int INF = 1000000000;
const int MAX = 50000;
struct kruskal
{
int from;
int to;
int val;
};
bool cmp(const kruskal& a, const kruskal& b)
{
return a.val < b.val;
}
kruskal ks[MAX + 1];
vector<pair<int, int> > adj[MAX + 1];
int parent[MAX + 1];
bool visit[MAX + 1];
int dep[MAX + 1];
int par[20][MAX + 1];
int dist[20][MAX + 1];
bool check[4 * MAX + 1];
int find(int x)
{
if (parent[x] == x)
return x;
else
return parent[x] = find(parent[x]);
}
bool merge(int x, int y)
{
x = find(x);
y = find(y);
if (x == y)
return false;
parent[x] = y;
return true;
}
void dfs(int x)
{
visit[x] = true;
for (int i = 0; i < adj[x].size(); i++)
{
int next = adj[x][i].first;
int cost = adj[x][i].second;
if (!visit[next])
{
par[0][next] = x;
dep[next] = dep[x] + 1;
dist[0][next] = cost;
dfs(next);
}
}
}
int lca(int u, int v)
{
int ret = 0;
if (dep[u] > dep[v])
swap(u, v);
for (int i = 19; i >= 0; i--)
{
int diff = dep[v] - dep[u];
if (diff >= (1 << i))
{
ret = max(ret, dist[i][v]);
v = par[i][v];
}
}
if (u == v)
return ret;
for (int i = 19; i >= 0; i--)
{
if (par[i][u] != par[u][v])
{
ret = max(ret, max(dist[i][u], dist[i][v]));
u = par[i][u];
v = par[i][v];
}
}
ret = max(ret, max(dist[0][u], dist[0][v]));
return ret;
}
int main()
{
int V, E;
scanf("%d %d", &V, &E);
for (int i = 0; i <= V; i++)
parent[i] = i;
for (int i = 0; i < E; i++)
{
int u, v, w;
scanf("%d %d %d", &u, &v, &w);
ks[i].from = u;
ks[i].to = v;
ks[i].val = w;
}
sort(ks, ks + E, cmp);
long long sum = 0;
int cnt = 0;
bool flag = false;
for (int i = 0; i < E; i++)
{
int u = ks[i].from;
int v = ks[i].to;
int w = ks[i].val;
if (merge(u, v))
{
check[i] = true;
adj[u].push_back(make_pair(v, w));
adj[v].push_back(make_pair(u, w));
sum += w;
cnt++;
if (cnt == V - 1)
{
flag = true;
break;
}
}
}
if (!flag || E <= V - 1)
{
puts("-1");
return 0;
}
dfs(1);
for (int i = 1; i < 20; i++)
{
for (int j = 1; j <= V; j++)
{
par[i][j] = par[i - 1][par[i - 1][j]];
dist[i][j] = max(dist[i - 1][j], dist[i - 1][par[i - 1][j]]);
}
}
long long maxx = 0x3f3f3f3f3f3f3f3f;
for (int i = 0; i < E; i++)
{
if (check[i])
continue;
int u = ks[i].from;
int v = ks[i].to;
int w = ks[i].val;
int t = lca(u, v);
if (t == w)
continue;
maxx = min(maxx, (long long)(sum - t + w));
}
if (maxx == 0x3f3f3f3f3f3f3f3f || maxx == sum)
puts("-1");
else
printf("%lld\n", maxx);
return 0;
}
I2luY2x1ZGUgPGNzdGRpbz4KI2luY2x1ZGUgPGNzdHJpbmc+CiNpbmNsdWRlIDxjbWF0aD4KI2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPHF1ZXVlPgojaW5jbHVkZSA8c2V0Pgp1c2luZyBuYW1lc3BhY2Ugc3RkOwpjb25zdCBpbnQgSU5GID0gMTAwMDAwMDAwMDsKY29uc3QgaW50IE1BWCA9IDUwMDAwOwoKc3RydWN0IGtydXNrYWwKewoJaW50IGZyb207CglpbnQgdG87CglpbnQgdmFsOwp9OwoKYm9vbCBjbXAoY29uc3Qga3J1c2thbCYgYSwgY29uc3Qga3J1c2thbCYgYikKewoJcmV0dXJuIGEudmFsIDwgYi52YWw7Cn0KCmtydXNrYWwga3NbTUFYICsgMV07CnZlY3RvcjxwYWlyPGludCwgaW50PiA+IGFkaltNQVggKyAxXTsKaW50IHBhcmVudFtNQVggKyAxXTsKYm9vbCB2aXNpdFtNQVggKyAxXTsKaW50IGRlcFtNQVggKyAxXTsKaW50IHBhclsyMF1bTUFYICsgMV07CmludCBkaXN0WzIwXVtNQVggKyAxXTsKYm9vbCBjaGVja1s0ICogTUFYICsgMV07CgppbnQgZmluZChpbnQgeCkKewoJaWYgKHBhcmVudFt4XSA9PSB4KQoJCXJldHVybiB4OwoJZWxzZQoJCXJldHVybiBwYXJlbnRbeF0gPSBmaW5kKHBhcmVudFt4XSk7Cn0KCmJvb2wgbWVyZ2UoaW50IHgsIGludCB5KQp7Cgl4ID0gZmluZCh4KTsKCXkgPSBmaW5kKHkpOwoJaWYgKHggPT0geSkKCQlyZXR1cm4gZmFsc2U7CglwYXJlbnRbeF0gPSB5OwoJcmV0dXJuIHRydWU7Cn0KCnZvaWQgZGZzKGludCB4KQp7Cgl2aXNpdFt4XSA9IHRydWU7Cglmb3IgKGludCBpID0gMDsgaSA8IGFkalt4XS5zaXplKCk7IGkrKykKCXsKCQlpbnQgbmV4dCA9IGFkalt4XVtpXS5maXJzdDsKCQlpbnQgY29zdCA9IGFkalt4XVtpXS5zZWNvbmQ7CgkJaWYgKCF2aXNpdFtuZXh0XSkKCQl7CgkJCXBhclswXVtuZXh0XSA9IHg7CgkJCWRlcFtuZXh0XSA9IGRlcFt4XSArIDE7CgkJCWRpc3RbMF1bbmV4dF0gPSBjb3N0OwoJCQlkZnMobmV4dCk7CgkJfQoJfQp9CgppbnQgbGNhKGludCB1LCBpbnQgdikKewoJaW50IHJldCA9IDA7CglpZiAoZGVwW3VdID4gZGVwW3ZdKQoJCXN3YXAodSwgdik7Cglmb3IgKGludCBpID0gMTk7IGkgPj0gMDsgaS0tKQoJewoJCWludCBkaWZmID0gZGVwW3ZdIC0gZGVwW3VdOwoJCWlmIChkaWZmID49ICgxIDw8IGkpKQoJCXsKCQkJcmV0ID0gbWF4KHJldCwgZGlzdFtpXVt2XSk7CgkJCXYgPSBwYXJbaV1bdl07CgkJfQoJfQoJaWYgKHUgPT0gdikKCQlyZXR1cm4gcmV0OwoJZm9yIChpbnQgaSA9IDE5OyBpID49IDA7IGktLSkKCXsKCQlpZiAocGFyW2ldW3VdICE9IHBhclt1XVt2XSkKCQl7CgkJCXJldCA9IG1heChyZXQsIG1heChkaXN0W2ldW3VdLCBkaXN0W2ldW3ZdKSk7CgkJCXUgPSBwYXJbaV1bdV07CgkJCXYgPSBwYXJbaV1bdl07CgkJfQoJfQoJcmV0ID0gbWF4KHJldCwgbWF4KGRpc3RbMF1bdV0sIGRpc3RbMF1bdl0pKTsKCXJldHVybiByZXQ7Cn0KCmludCBtYWluKCkKewoJaW50IFYsIEU7CglzY2FuZigiJWQgJWQiLCAmViwgJkUpOwoJZm9yIChpbnQgaSA9IDA7IGkgPD0gVjsgaSsrKQoJCXBhcmVudFtpXSA9IGk7Cglmb3IgKGludCBpID0gMDsgaSA8IEU7IGkrKykKCXsKCQlpbnQgdSwgdiwgdzsKCQlzY2FuZigiJWQgJWQgJWQiLCAmdSwgJnYsICZ3KTsKCQlrc1tpXS5mcm9tID0gdTsKCQlrc1tpXS50byA9IHY7CgkJa3NbaV0udmFsID0gdzsKCX0KCXNvcnQoa3MsIGtzICsgRSwgY21wKTsKCWxvbmcgbG9uZyBzdW0gPSAwOwoJaW50IGNudCA9IDA7Cglib29sIGZsYWcgPSBmYWxzZTsKCWZvciAoaW50IGkgPSAwOyBpIDwgRTsgaSsrKQoJewoJCWludCB1ID0ga3NbaV0uZnJvbTsKCQlpbnQgdiA9IGtzW2ldLnRvOwoJCWludCB3ID0ga3NbaV0udmFsOwoJCWlmIChtZXJnZSh1LCB2KSkKCQl7CgkJCWNoZWNrW2ldID0gdHJ1ZTsKCQkJYWRqW3VdLnB1c2hfYmFjayhtYWtlX3BhaXIodiwgdykpOwoJCQlhZGpbdl0ucHVzaF9iYWNrKG1ha2VfcGFpcih1LCB3KSk7CgkJCXN1bSArPSB3OwoJCQljbnQrKzsKCQkJaWYgKGNudCA9PSBWIC0gMSkKCQkJewoJCQkJZmxhZyA9IHRydWU7CgkJCQlicmVhazsKCQkJfQoJCX0KCX0KCWlmICghZmxhZyB8fCBFIDw9IFYgLSAxKQoJewoJCXB1dHMoIi0xIik7CgkJcmV0dXJuIDA7Cgl9CglkZnMoMSk7Cglmb3IgKGludCBpID0gMTsgaSA8IDIwOyBpKyspCgl7CgkJZm9yIChpbnQgaiA9IDE7IGogPD0gVjsgaisrKQoJCXsKCQkJcGFyW2ldW2pdID0gcGFyW2kgLSAxXVtwYXJbaSAtIDFdW2pdXTsKCQkJZGlzdFtpXVtqXSA9IG1heChkaXN0W2kgLSAxXVtqXSwgZGlzdFtpIC0gMV1bcGFyW2kgLSAxXVtqXV0pOwoJCX0KCX0KCWxvbmcgbG9uZyBtYXh4ID0gMHgzZjNmM2YzZjNmM2YzZjNmOwoJZm9yIChpbnQgaSA9IDA7IGkgPCBFOyBpKyspCgl7CgkJaWYgKGNoZWNrW2ldKQoJCQljb250aW51ZTsKCQlpbnQgdSA9IGtzW2ldLmZyb207CgkJaW50IHYgPSBrc1tpXS50bzsKCQlpbnQgdyA9IGtzW2ldLnZhbDsKCQlpbnQgdCA9IGxjYSh1LCB2KTsKCQlpZiAodCA9PSB3KQoJCQljb250aW51ZTsKCQltYXh4ID0gbWluKG1heHgsIChsb25nIGxvbmcpKHN1bSAtIHQgKyB3KSk7Cgl9CglpZiAobWF4eCA9PSAweDNmM2YzZjNmM2YzZjNmM2YgfHwgbWF4eCA9PSBzdW0pCgkJcHV0cygiLTEiKTsKCWVsc2UKCQlwcmludGYoIiVsbGRcbiIsIG1heHgpOwoJcmV0dXJuIDA7Cn0=