#include <bits/stdc++.h>
using namespace std;
int f[5005];
struct node{
int s,cost,to;
};
node Edge[200005];
bool cmp(node a,node b){
return a.cost<b.cost;
}
int find(int x){
while(x != f[x]) x = f[x] = f[f[x]];
return x;
}
long long ans;
int main()
{
int v,e,E;
scanf("%d%d",&v,&e);
for(int i = 1;i <= e; i++)
scanf("%d%d%d",&Edge[i].s,&Edge[i].to,&Edge[i].cost);
sort(Edge,Edge+e+1,cmp);
int N = 1;
for(int i = 1; i <= v; i++) f[i] = i;
for(int i = 1; i <= e; i++){
if(N == v){
printf("%lld\n",ans);
break;
}
if(find(Edge[i].s)==find(Edge[i].to)) continue;
f[Edge[i].s] = Edge[i].to;
N++;
ans += Edge[i].cost;
}
if(N != v) printf("orz");
return 0;
}