#include<iostream>
#include<algorithm>
using namespace std;
#define N 400010
int n,m,x,y,w,tot,sum;
struct Edge{
int x,y,w;
}e[N];
bool cmp(Edge a,Edge b){
return a.w<b.w;
}
struct union_Find_Sets{
int fa[N];
int findFa(int v){return fa[v]==v?v:fa[v]=findFa(fa[v]);}
void unionn(int v,int u){fa[v]=u;}
void init(int size){for(int i=1;i<=n;i++)fa[i]=i;}
}ufs;
int main(){
cin>>n>>m;
//cout<<n<<" "<<m<<endl;
ufs.init(n);
for(int i=1;i<=m;i++){
cin>>x>>y>>w;
e[i]=(Edge){x,y,w};
}
sort(e+1,e+m+1,cmp);
for(int i=1;i<=m&&tot<n-1;i++){
Edge node=e[i];
int fx=ufs.findFa(node.x),fy=ufs.findFa(node.y);
if(fx!=fy){
sum+=node.w;
tot++;
ufs.unionn(fx,fy);
//cout<<node.w<<"|";
}
}
//cout<<"\n";
cout<<sum;
}