#include<iostream>
#include<algorithm>
#include<queue>
#include<cmath>
#include<cstring>
#include<cstdlib>
#include<cstdio>
using namespace std;
const int N=400005;
const int oo=0x3f3f3f3f;
struct node{
int v,w,next;
}e[N];
int head[N],dis[N],cnt,n,m;
int vis[N],x,y,z,ans;
void add(int u,int v,int w){
cnt++;
e[cnt].v=v;
e[cnt].w=w;
e[cnt].next=head[u];
head[u]=cnt;
}
void boom_JJJ(){
scanf("%d %d",&n,&m);
for(int i=1;i<=m;i++){
scanf("%d %d %d",&x,&y,&z);
add(x,y,z); add(y,x,z);
}
for(int i=1;i<=n;i++)
dis[i]=oo;
}
void Yao_Chen_Lai_Le(){
dis[1]=0;
//for(int i=2;i<=n;i++)
// dis[i]=oo;
for(int i=head[1];i;i=e[i].next)
dis[e[i].v]=min(dis[e[i].v],e[i].w);
int cxk=n-1,now=1;
while(cxk--){
int mn=oo;
vis[now]=1;
for(int i=1;i<=n;i++)
if(!vis[i] && mn>dis[i])
{ mn=dis[i]; now=i; }
ans+=mn;
for(int i=head[now];i;i=e[i].next){
int sv=e[i].v;
if(dis[sv]>e[i].w && !vis[sv])
dis[sv]=e[i].w;
}
}
}
int main(){
freopen("p3366.in","r",stdin);
freopen("p3366.out","w",stdout);
boom_JJJ();
Yao_Chen_Lai_Le();
printf("%d",ans);
return 0;
}