#include<iostream>
#include<algorithm>
#define int long long
const int N = 5e3+5;
using namespace std;
int fa[N],n,m,cnt,ans,num;
struct Edge{
int to,start,val;
}a[(int)2e5+5];
int find(int x)
{
return fa[x]==x?x:find(fa[x]);
}
bool cmp(Edge x,Edge y){
return x.val < y.val;
}
void kruskal();
signed main(){
cin>>n>>m;
for(int i=1,u,v,w;i<=m;i++){
cin>>u>>v>>w;
a[i] = {u,v,w};
}
sort(a+1,a+1+m,cmp);
for(int i=1;i<=n;i++)
fa[i]=i;
kruskal();
return 0;
}
void kruskal(){
for(int i=1;i<=m;i++){
int u=find(a[i].start);
int v=find(a[i].to);
if(u==v) continue;
fa[v] = u;ans+=a[i].val;
if(u < v) swap(u,v);
if(++num == n-1){
cout<<ans;
return;
}
}
puts("orz");
}