#include<bits/stdc++.h>
using namespace std;
int n, m, cnt = 1, ans;
struct node {
int to, nxt, w;
} edge[20005];
int head[1005];
int dis[1005];
void addedge(int u, int v, int w) {
edge[u].to = v;
edge[u].w = w;
edge[u].nxt = head[u];
head[u] = cnt++;
}
int vis[1005];
int prim() {
dis[1] = 0;
int stp = n;
while (stp--) {
int mi = 0x3f3f, id = -1;
for (int i = 1; i <= n; i++)
if (!vis[i] && dis[i] < mi)
mi = dis[i], id = i;
if (id == -1)
return -1;
ans += mi;
vis[id] = 1;
for (int i = head[id]; i != 0; i = edge[i].nxt)
if (!vis[edge[i].to] && edge[i].w < dis[i])
dis[i] = edge[i].w;
}
return ans;
}
int main() {
memset(dis, 0x3f3f, sizeof dis);
cin >> n >> m;
for (int i = 1; i <= m; i++) {
int x, y, z;
cin >> x >> y >> z;
addedge(x, y, z);
addedge(y, x, z);
}
cout << prim();
return 0;
}