#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 F(int a){
int tf = f[a];
if(f[tf] == tf)return tf;
f[a] = F(tf);
return f[a];
}
bool bc(int a,int b){
if(F(a) == F(b)) return 1;
f[b] = a;
return 0;
}*/
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;
}
//for(int i = 0 ;i < e;i++) printf("%d %d %d \n",Edge[i].s,Edge[i].to,Edge[i].cost);
if(N != v) printf("orz");
return 0;
}