#include <bits/stdc++.h>
using namespace std;
//Union_Find
long long ufpar[100005], ufrank[100005];
//初期化
void ufinit(int n){
for(int ii = 1; ii <= n; ii++){
ufpar[ii] = ii;
ufrank[ii] = 0;
}
}
//木の根を求める
int uffind(long long x){
if(ufpar[x] == x) {
return x;
} else {
ufpar[x] = uffind(ufpar[x]);
return ufpar[x];
}
}
//併合
void ufunite(long long x, long long y){
x = uffind(x);
y = uffind(y);
if(x == y) return;
if(ufrank[x] < ufrank[y]){
ufpar[x] = y;
} else {
ufpar[y] = x;
if(ufrank[x] == ufrank[y]) ufrank[y]++;
}
}
//同じ集合か
bool ufsame(long long x, long long y){
return uffind(x) == uffind(y);
}
//Kruskal (Union_Findが必要)
const int max_e=200000;
struct edge { int u, v; long long cost; };
bool comp(const edge& e1, const edge& e2){
return e1.cost < e2.cost;
}
edge es[max_e]; //各辺の情報を持つ
int v,e; //頂点数、辺数
int kruskal(){
sort(es, es + e, comp);
ufinit(v);
long long res = 0;
for(int i = 0; i < e; i++){
edge e = es[i];
if(!ufsame(e.u, e.v)){
ufunite(e.u, e.v);
res += e.cost;
}
}
return res;
}
int main (){
cin >> v >> e;
edge em;
for(int i=0;i<e;i++){
int s,t,w;
cin >> s >> t >> w;
em.u=s; em.v=t; em.cost=w;
es[i]=em;
}
cout << kruskal() << endl;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci8vVW5pb25fRmluZApsb25nIGxvbmcgdWZwYXJbMTAwMDA1XSwgdWZyYW5rWzEwMDAwNV07CgovL+WIneacn+WMlgp2b2lkIHVmaW5pdChpbnQgbil7Cglmb3IoaW50IGlpID0gMTsgaWkgPD0gbjsgaWkrKyl7CgkJdWZwYXJbaWldID0gaWk7CgkJdWZyYW5rW2lpXSA9IDA7Cgl9Cn0KCi8v5pyo44Gu5qC544KS5rGC44KB44KLCmludCB1ZmZpbmQobG9uZyBsb25nIHgpewoJaWYodWZwYXJbeF0gPT0geCkgewoJCXJldHVybiB4OwoJfSBlbHNlIHsKCQl1ZnBhclt4XSA9IHVmZmluZCh1ZnBhclt4XSk7CgkJcmV0dXJuIHVmcGFyW3hdOwoJfQp9CgovL+S9teWQiAp2b2lkIHVmdW5pdGUobG9uZyBsb25nIHgsIGxvbmcgbG9uZyB5KXsKCXggPSB1ZmZpbmQoeCk7Cgl5ID0gdWZmaW5kKHkpOwoJaWYoeCA9PSB5KSByZXR1cm47CglpZih1ZnJhbmtbeF0gPCB1ZnJhbmtbeV0pewoJCXVmcGFyW3hdID0geTsKCX0gZWxzZSB7CgkJdWZwYXJbeV0gPSB4OwoJCWlmKHVmcmFua1t4XSA9PSB1ZnJhbmtbeV0pIHVmcmFua1t5XSsrOwoJfQp9CgovL+WQjOOBmOmbhuWQiOOBiwpib29sIHVmc2FtZShsb25nIGxvbmcgeCwgbG9uZyBsb25nIHkpewoJcmV0dXJuIHVmZmluZCh4KSA9PSB1ZmZpbmQoeSk7Cn0KCi8vS3J1c2thbCAoVW5pb25fRmluZOOBjOW/heimgSkKY29uc3QgaW50IG1heF9lPTIwMDAwMDsKc3RydWN0IGVkZ2UgeyBpbnQgdSwgdjsgbG9uZyBsb25nIGNvc3Q7IH07CmJvb2wgY29tcChjb25zdCBlZGdlJiBlMSwgY29uc3QgZWRnZSYgZTIpewogICAgcmV0dXJuIGUxLmNvc3QgPCBlMi5jb3N0Owp9CmVkZ2UgZXNbbWF4X2VdOyAvL+WQhOi+uuOBruaDheWgseOCkuaMgeOBpAppbnQgdixlOyAvL+mggueCueaVsOOAgei+uuaVsAppbnQga3J1c2thbCgpewogICAgc29ydChlcywgZXMgKyBlLCBjb21wKTsKICAgIHVmaW5pdCh2KTsKICAgIGxvbmcgbG9uZyByZXMgPSAwOwogICAgZm9yKGludCBpID0gMDsgaSA8IGU7IGkrKyl7CiAgICAgICAgZWRnZSBlID0gZXNbaV07CiAgICAgICAgaWYoIXVmc2FtZShlLnUsIGUudikpewogICAgICAgICAgICB1ZnVuaXRlKGUudSwgZS52KTsKICAgICAgICAgICAgcmVzICs9IGUuY29zdDsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVzOwp9CgppbnQgbWFpbiAoKXsKCWNpbiA+PiB2ID4+IGU7CgllZGdlIGVtOwoJZm9yKGludCBpPTA7aTxlO2krKyl7CgkJaW50IHMsdCx3OwoJCWNpbiA+PiBzID4+IHQgPj4gdzsKCQllbS51PXM7IGVtLnY9dDsgZW0uY29zdD13OwoJCWVzW2ldPWVtOwoJfQoJY291dCA8PCBrcnVza2FsKCkgPDwgZW5kbDsKICAgIHJldHVybiAwOwp9