#include<iostream>
#include<cstdio>
#include<algorithm>
#define re register
#define MANN 250000
#define MANX 6000
using namespace std;
struct edge{
int u,v,w;
}e[MANN];
int n,m,x,y,t,f[MANX],Count,sum,p;
bool cmp(edge a,edge b){
return a.w<b.w;
}
int getf(int k){//并查集压缩
if(f[k]==k) return k;
return f[k]=getf(f[k]);
}
int qmerge(int a,int b){//进行合并同时判断是否同源
int t1,t2;
t1=getf(a);
t2=getf(b);
if(t1!=t2){
f[t1]=t2;
return 1;
}
return 0;
}
int main(){
cin>>n>>m;
for(re int i=1;i<=n;i++)f[i]=i;
for(re int i=1;i<=m;i++){
scanf("%d%d%d",&e[i].u,&e[i].v,&e[i].w);
}
sort(e+1,e+m+1,cmp);
for(re int i=1;i<=m;i++){
if(qmerge(e[i].u,e[i].v)){
Count++;
sum+=e[i].w;
}
if(Count==n-1)break;
}
if(Count!=n-1)cout<<"不能生成最小生成树"<<endl;
else
cout<<sum<<endl;
return 0;
}