#include<cstdio>
#include<algorithm>
using namespace std;
int n,m,fa[5000];
struct Edge{
int u,v,w;
}e[25000000];
bool cmp(Edge x,Edge y)
{
return x.w<y.w;
}
void Init(int x)
{
for(int i=1;i<=x;i++) fa[i]=i;
return;
}
bool Merge(int a,int b)
{
int q=fa[a],p=fa[b];
if(q==p) return false;
for(int i=1;i<=n;i++) if(fa[i]==q) fa[i]=p;
return true;
}
int Kruskal(int x)
{
int ans=0;
sort(e,e+m,cmp);
for(int i=0;i<m;i++)
{
if(Merge(e[i].u,e[i].v))
{
ans+=e[i].w;
x--;
if(x==1) return ans;
}
}
return 0;
}
int main()
{
scanf("%d%d",&n,&m);
Init(n);
for(int i=0;i<m;i++) scanf("%d%d%d",&e[i].u,&e[i].v,&e[i].w);
printf("%d",Kruskal(n));
return 0;
}