/// kruskal by muoii
/// vn.spoj.com/problems/QBMST/
#include <bits/stdc++.h>
using namespace std;
#define tag "spoj"
#define maxn 1007
#define maxc 207
#define oo 1000000007
#define mid ((l+r)>>1)
#define meset(a,x) memset(a,x,sizeof(a))
#define loop(x) for(int LoOpEr=x;LoOpEr-->0;)
///>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
int n,m;
struct edge{
int depa,dest,weigh;
bool operator < (const edge &e) { return weigh<e.weigh; };
};
vector<edge> E;
struct dsu{
int siz;
vector<int> par;
dsu(const int &n): siz(n), par(n+2,0) {};
int root(const int &v)
{
return par[v]<=0?v:par[v]=root(par[v]);
}
bool unite(int x,int y)
{
if((x=root(x))==(y=root(y))) return false;
if(par[x]>par[y]) par[y]=x;
else par[y]-=(par[x]==par[y]),par[x]=y;
return true;
}
};
int main()
{
#ifdef dmdd
freopen(tag".inp","r",stdin); freopen(tag".out","w",stdout);
#endif // dmdd
ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
cin>>n>>m;
int u,v,w;
while(m-->0) cin>>u>>v>>w,E.push_back({u,v,w});
sort(E.begin(),E.end());
int ans=0;
dsu mst(n);
for(const edge &e: E) ans+=mst.unite(e.depa,e.dest)?e.weigh:0;
cout<<ans;
return 0;
}
Ly8vIGtydXNrYWwgYnkgbXVvaWkKLy8vIHZuLnNwb2ouY29tL3Byb2JsZW1zL1FCTVNULwojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKI2RlZmluZSB0YWcgInNwb2oiCiNkZWZpbmUgbWF4biAxMDA3CiNkZWZpbmUgbWF4YyAyMDcKI2RlZmluZSBvbyAxMDAwMDAwMDA3CiNkZWZpbmUgbWlkICgobCtyKT4+MSkKI2RlZmluZSBtZXNldChhLHgpIG1lbXNldChhLHgsc2l6ZW9mKGEpKQojZGVmaW5lIGxvb3AoeCkgZm9yKGludCBMb09wRXI9eDtMb09wRXItLT4wOykKLy8vPj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+PgppbnQgbixtOwpzdHJ1Y3QgZWRnZXsKICAgIGludCBkZXBhLGRlc3Qsd2VpZ2g7CiAgICBib29sIG9wZXJhdG9yIDwgKGNvbnN0IGVkZ2UgJmUpIHsgcmV0dXJuIHdlaWdoPGUud2VpZ2g7IH07Cn07CnZlY3RvcjxlZGdlPiBFOwoKc3RydWN0IGRzdXsKCiAgICBpbnQgc2l6OwogICAgdmVjdG9yPGludD4gcGFyOwoKICAgIGRzdShjb25zdCBpbnQgJm4pOiBzaXoobiksIHBhcihuKzIsMCkge307CgogICAgaW50IHJvb3QoY29uc3QgaW50ICZ2KQogICAgewogICAgICAgIHJldHVybiBwYXJbdl08PTA/djpwYXJbdl09cm9vdChwYXJbdl0pOwogICAgfQoKICAgIGJvb2wgdW5pdGUoaW50IHgsaW50IHkpCiAgICB7CiAgICAgICAgaWYoKHg9cm9vdCh4KSk9PSh5PXJvb3QoeSkpKSByZXR1cm4gZmFsc2U7CgogICAgICAgIGlmKHBhclt4XT5wYXJbeV0pIHBhclt5XT14OwogICAgICAgIGVsc2UgcGFyW3ldLT0ocGFyW3hdPT1wYXJbeV0pLHBhclt4XT15OwoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KfTsKCmludCBtYWluKCkKewogICAgI2lmZGVmIGRtZGQKICAgIGZyZW9wZW4odGFnIi5pbnAiLCJyIixzdGRpbik7IGZyZW9wZW4odGFnIi5vdXQiLCJ3IixzdGRvdXQpOwogICAgI2VuZGlmIC8vIGRtZGQKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7Y2luLnRpZSgwKTtjb3V0LnRpZSgwKTsKCiAgICBjaW4+Pm4+Pm07CgogICAgaW50IHUsdix3OwogICAgd2hpbGUobS0tPjApIGNpbj4+dT4+dj4+dyxFLnB1c2hfYmFjayh7dSx2LHd9KTsKCiAgICBzb3J0KEUuYmVnaW4oKSxFLmVuZCgpKTsKCiAgICBpbnQgYW5zPTA7CiAgICBkc3UgbXN0KG4pOwoKICAgIGZvcihjb25zdCBlZGdlICZlOiBFKSBhbnMrPW1zdC51bml0ZShlLmRlcGEsZS5kZXN0KT9lLndlaWdoOjA7CgogICAgY291dDw8YW5zOwoKICAgIHJldHVybiAwOwp9Cg==