#include<bits/stdc++.h>
using namespace std;
const int NUM = 5e3 + 1;
int s[NUM];
struct node{
int u,v,w;
};
node f[200001];
int find(int u){
return s[u] == 0 ? u : find(s[u]);
}
inline int read(){
int now = 0,nev = 1;
char c = getchar();
while(c < '0' || c > '9'){
if(c == '-') nev = -1;
c = getchar();
}
while(c >= '0' && c <= '9'){
now = (now << 1) + (now << 3) + (c & 15);
c = getchar();
}
return now * nev;
}
int n,m;
bool cmp(node a,node b){
return a.w < b.w;
}
int kruskal(){
int ans = 0;
for(int i = 1;i <= n;i++){
s[i] = i;
}
stable_sort(f + 1,f + m + 1,cmp);
for(int i = 1;i <= m;i++){
int b = find(f[i].u);
int c = find(f[i].v);
if(b == c) continue;
s[c] = b;
ans += f[i].w;
}
if(ans == 0){
printf("orz");
}
printf("%d",ans);
}
int main(){
n = read();
m = read();
for(int i = 1;i <= n * n;i++){
f[i].w = 100000;
}
for(int i = 1;i <= m;i++){
f[i].u = read();
f[i].v = read();
f[i].w = read();
}
kruskal();
}