#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define re register
using namespace std;
int _,__,_______[100001],________ = 0;
struct node{
int _u,_v,_w;
}____[210000];
inline int cmp(node _____,node ______)
{
return _____._w < ______._w;
}
inline int get(int _____)
{
while(_______[_____] != _____) _____ = _______[_____] = _______[_______[_____]];
return _____;
}
inline int Kruskal()
{
int ___________ = 0;
for(re int ___ = 1;___ <= __;++___)
{
int _________ = get(____[___]._u);
int __________ = get(____[___]._v);
if(_________ == __________)
continue;
else{
________ += ____[___]._w;
_______[__________] = _________;
if(++___________ == _ - 1) return ________;
}
}
}
int main()
{
scanf("%d %d",&_,&__);
for(re int ___ = 1;___ <= _;++___)
_______[___] = ___;
for(re int ___ = 1;___ <= __;++___){
int _1,_2,_3;
scanf("%d %d %d",&_1,&_2,&_3);
____[___]._u = _1; ____[___]._v = _2; ____[___]._w = _3;
}
sort(____ + 1,____ + __ + 1,cmp);
printf("%d",Kruskal());
return 0;
}