#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");
}