#include<bits/stdc++.h>
using namespace std;
const int maxn = 5e3 + 10, maxm = 2e5 + 10;
struct Node {
int u, v, w;
} e[maxm];
int f[maxn], best[maxn];
bool vis[maxm];
int n, m;
int find(int x) {
return f[x] == x ? x : find(f[x]);
}
inline bool cmp(int u, int v) {
if (v == 0) {
return 1;
}
if (e[u].w != e[v].w) {
return e[u].w < e[v].w;
}
return u < v;
}
void boruvka() {
memset(vis, 0, sizeof vis);
int ans = 0;
int cnt = 0;
bool status = true;
while (status) {
status = false;
memset(best, 0, sizeof best);
for (int i = 1; i <= m; ++i) {
if (vis[i]) {
continue;
}
int uu = find(e[i].u);
int vv = find(e[i].v);
if (uu == vv) {
continue;
}
if (cmp(i, best[uu])) {
best[uu] = i;
}
if (cmp(i, best[vv])) {
best[vv] = i;
}
}
for (int i = 1; i <= n; ++i) {
if (best[i] && !vis[best[i]]) {
status = true;
cnt++;
ans += e[best[i]].w;
vis[best[i]] = 1;
int uu = find(e[i].u);
int vv = find(e[i].v);
f[uu] = vv;
}
}
}
if (cnt == n - 1) {
printf("%d\n", ans);
} else {
printf("orz");
}
}
int main() {
scanf("%d%d", &n, &m);
for (int i = 1; i <= m; ++i) {
scanf("%d%d%d", &e[i].u, &e[i].v, &e[i].w);
}
for (int i = 1; i <= n; ++i) {
f[i] = i;
}
boruvka();
return 0;
}