#include<bits/stdc++.h>
using namespace std;
const int z = 1024;
int parent[z], n, m;
struct edge{
int f, t, w;
bool operator <(const edge x) const{
return w < x.w;
}
} line[z*4];
void initial(int key) {
for(int i = 1;i <= key;++i)
parent[i] = i;
return;
}
int find(int x) {
if(x != parent[x])
parent[x] = find(parent[x]);
return parent[x];
}
int kruskal() {
sort(line+1,line+m+1);
initial(n);
int p = 0, tmp = 0;
for(int i = 1;i <= m&&tmp <= n-1;++i) {
int x = line[i].f;
int y = line[i].t;
if(find(x) != find(y)) {
parent[x] = y;
p += line[i].w;
tmp++;
}
}
return p;
}
int main() {
scanf("%d %d",&n,&m);
for(int i = 1;i <= m;++i)
scanf("%d %d %d",&line[i].f,&line[i].t,&line[i].w);
printf("%d",kruskal());
return 0;
}
@bikuhiku