#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define inf32 ((int)1e9 + 7)
#define inf64 ((long long)1e18 + 7)
#define MASK32(x) (1 << (x))
#define MASK64(x) (1ll << (x))
#define BIT(mask, i) (((mask) >> (i)) & 1)
#define all(a) begin(a), end(a)
#define isz(a) ((int)a.size())
const int N = 2e5 + 1;
struct Edge {
int u, v, w;
} e[N];
vector<int> g[N];
int comp[N];
bool cycle[N];
struct DSU {
vector<int> lab;
DSU(int n) : lab(n + 1, -1) {}
int find_set(int u) {
return (lab[u] < 0) ? u : (lab[u] = find_set(lab[u]));
}
bool union_sets(int u, int v) {
u = find_set(u);
v = find_set(v);
if(u == v) return 0;
if(lab[u] > lab[v]) swap(u, v);
lab[u] += lab[v];
lab[v] = u;
return 1;
}
};
void dfs(int u, int r) {
comp[u] = r;
for(int i : g[u]) {
int v = u ^ e[i].u ^ e[i].v;
if(!comp[v]) dfs(v, r);
}
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
int n, m;
cin >> n >> m;
for(int i = 1, u, v, w; i <= m; ++i) {
cin >> e[i].u >> e[i].v >> e[i].w;
g[e[i].u].push_back(i);
g[e[i].v].push_back(i);
}
for(int u = 1; u <= n; ++u)
if(!comp[u]) dfs(u, u);
sort(e + 1, e + m + 1, [](const Edge& lhs, const Edge& rhs) {
return lhs.w > rhs.w;
});
DSU dsu(n);
long long res = 0;
for(int i = 1; i <= m; ++i) {
if(dsu.union_sets(e[i].u, e[i].v)) res += e[i].w;
else if(!cycle[comp[e[i].u]]) {
res += e[i].w;
cycle[comp[e[i].u]] = 1;
}
}
cout << res;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojZGVmaW5lIGVuZGwgJ1xuJwojZGVmaW5lIGluZjMyICgoaW50KTFlOSArIDcpCiNkZWZpbmUgaW5mNjQgKChsb25nIGxvbmcpMWUxOCArIDcpCiNkZWZpbmUgTUFTSzMyKHgpICgxIDw8ICh4KSkKI2RlZmluZSBNQVNLNjQoeCkgKDFsbCA8PCAoeCkpCiNkZWZpbmUgQklUKG1hc2ssIGkpICgoKG1hc2spID4+IChpKSkgJiAxKQojZGVmaW5lIGFsbChhKSBiZWdpbihhKSwgZW5kKGEpCiNkZWZpbmUgaXN6KGEpICgoaW50KWEuc2l6ZSgpKQoKY29uc3QgaW50IE4gPSAyZTUgKyAxOwoKc3RydWN0IEVkZ2UgewogICAgaW50IHUsIHYsIHc7Cn0gZVtOXTsKdmVjdG9yPGludD4gZ1tOXTsKaW50IGNvbXBbTl07CmJvb2wgY3ljbGVbTl07CgpzdHJ1Y3QgRFNVIHsKICAgIHZlY3RvcjxpbnQ+IGxhYjsKCiAgICBEU1UoaW50IG4pIDogbGFiKG4gKyAxLCAtMSkge30KCiAgICBpbnQgZmluZF9zZXQoaW50IHUpIHsKICAgICAgICByZXR1cm4gKGxhYlt1XSA8IDApID8gdSA6IChsYWJbdV0gPSBmaW5kX3NldChsYWJbdV0pKTsKICAgIH0KCiAgICBib29sIHVuaW9uX3NldHMoaW50IHUsIGludCB2KSB7CiAgICAgICAgdSA9IGZpbmRfc2V0KHUpOwogICAgICAgIHYgPSBmaW5kX3NldCh2KTsKICAgICAgICBpZih1ID09IHYpIHJldHVybiAwOwogICAgICAgIGlmKGxhYlt1XSA+IGxhYlt2XSkgc3dhcCh1LCB2KTsKICAgICAgICBsYWJbdV0gKz0gbGFiW3ZdOwogICAgICAgIGxhYlt2XSA9IHU7CiAgICAgICAgcmV0dXJuIDE7CiAgICB9Cn07Cgp2b2lkIGRmcyhpbnQgdSwgaW50IHIpIHsKICAgIGNvbXBbdV0gPSByOwogICAgZm9yKGludCBpIDogZ1t1XSkgewogICAgICAgIGludCB2ID0gdSBeIGVbaV0udSBeIGVbaV0udjsKICAgICAgICBpZighY29tcFt2XSkgZGZzKHYsIHIpOwogICAgfQp9CgppbnQgbWFpbigpIHsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7CiAgICBjaW4udGllKDApOwoKICAgIGludCBuLCBtOwogICAgY2luID4+IG4gPj4gbTsKICAgIGZvcihpbnQgaSA9IDEsIHUsIHYsIHc7IGkgPD0gbTsgKytpKSB7CiAgICAgICAgY2luID4+IGVbaV0udSA+PiBlW2ldLnYgPj4gZVtpXS53OwogICAgICAgIGdbZVtpXS51XS5wdXNoX2JhY2soaSk7CiAgICAgICAgZ1tlW2ldLnZdLnB1c2hfYmFjayhpKTsKICAgIH0KICAgIGZvcihpbnQgdSA9IDE7IHUgPD0gbjsgKyt1KQogICAgICAgIGlmKCFjb21wW3VdKSBkZnModSwgdSk7CiAgICBzb3J0KGUgKyAxLCBlICsgbSArIDEsIFtdKGNvbnN0IEVkZ2UmIGxocywgY29uc3QgRWRnZSYgcmhzKSB7CiAgICAgICAgcmV0dXJuIGxocy53ID4gcmhzLnc7CiAgICB9KTsKICAgIERTVSBkc3Uobik7CiAgICBsb25nIGxvbmcgcmVzID0gMDsKICAgIGZvcihpbnQgaSA9IDE7IGkgPD0gbTsgKytpKSB7CiAgICAgICAgaWYoZHN1LnVuaW9uX3NldHMoZVtpXS51LCBlW2ldLnYpKSByZXMgKz0gZVtpXS53OwogICAgICAgIGVsc2UgaWYoIWN5Y2xlW2NvbXBbZVtpXS51XV0pIHsKICAgICAgICAgICAgcmVzICs9IGVbaV0udzsKICAgICAgICAgICAgY3ljbGVbY29tcFtlW2ldLnVdXSA9IDE7CiAgICAgICAgfQogICAgfQogICAgY291dCA8PCByZXM7CgogICAgcmV0dXJuIDA7Cn0=