#include using namespace std; struct Edge { int u, v; long long w; }; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int N, M; cin >> N >> M; vector edges(M); vector> ws(N); for (auto &[u, v, w] : edges) { cin >> u >> v >> w; u--, v--; ws[u].push_back(w); ws[v].push_back(w); } vector first(N), second(N); for (int v = 0; v < N; ++v) { sort(ws[v].begin(), ws[v].end(), greater<>()); if (ws[v].size() >= 1) first[v] = ws[v][0]; if (ws[v].size() >= 2) second[v] = ws[v][1]; } vector ord(N); iota(ord.begin(), ord.end(), 0); sort(ord.begin(), ord.end(), [&](int a, int b) { if (second[a] != second[b]) return second[a] > second[b]; if (first[a] != first[b]) return first[a] > first[b]; return a < b; }); vector owner(N); for (int i = 0; i < N; ++i) { owner[ord[i]] = i % 2; } long long ans = 0; for (auto [u, v, w] : edges) { if (owner[u] != owner[v]) continue; if (owner[u] == 0) ans += w; else ans -= w; } cout << ans << '\n'; }