#include using namespace std; using edge = tuple; const int N = 2e5 + 10; int fa[N]; int find(int x) { return fa[x] > 0 ? find(fa[x]) : x; } int n, m; vector e; int main() { memset(fa, -1, sizeof fa); cin >> n >> m; for(int i = 1, u, v, w; i <= m; i ++) { cin >> u >> v >> w; e.push_back({w, u, v}); } sort(e.begin(), e.end()); long long ans = 0; for(auto &[w, u, v] : e) { int fu = find(u), fv = find(v); if(fu == fv) continue; ans += (long long)w * fa[fu] * fa[fv]; if(fa[fu] < fa[fv]) swap(fu, fv); fa[fv] += fa[fu]; fa[fu] = fv; } cout << ans; }