#include<iostream>#include<algorithm>usingnamespace std;typedeflonglong ll;constint Max =1e6+5;struct node
{int u, v, w;node(int a=0,int b=0,int c=0){
u = a, v = b, w = c;}booloperator<(node& a){return w < a.w;}};
node lst[Max];int f[Max];intfind(int n){if(f[n]== n)return n;elsereturn f[n]=find(f[n]);}voidmerge(int a,int b){if(find(a)==find(b))return;
f[find(b)]=find(a);}intmain(){int n, m;cin >> n >> m;for(int i =1;i <= n;i++)f[i]= i;for(int i =1;i <= m;i++){int a, b, c;cin >> a >> b >> c;
lst[i]=node(a, b, c);}sort(lst +1, lst +1+ m);longlong sum =0;for(int i =1;i <= m;i++){int a = lst[i].u, b = lst[i].v;if(find(a)==find(b))continue;
sum += lst[i].w;merge(a, b);}
cout << sum;}