Link to this code: https://cses.fi/paste/57abd6ef168285321248c4e/
#include"bits/stdc++.h"
using namespace std;
#define ll long long
#define str string
#define ld long double
#define ss second
#define ff first
#define pb push_back
#define pp pop_back
#define lcm __detail::__lcm
#define gcd __gcd
#define vll vector<ll>
#define vii vector<int>
#define all(v) (v).begin(),(v).end()
#define pii pair<int,int>
#define pll pair<ll,ll>
#define MAXN 1000005
#define mod 998244353
#define sz size()
#define int ll
vll e[MAXN];
ll par[MAXN];
void dsu(int u,int v){
	if(par[u]==par[v]) return;
	if(e[u].sz>e[v].sz) swap(u,v);
	for(auto x:e[u]){
		e[v].pb(x);
		par[x]=par[v];
	}e[u].clear();
}
void solve(){
	ll n,m;cin>>n>>m;
	priority_queue<pair<ll,pll>,vector<pair<ll,pll>>,greater<>>q;
	for(int i=1;i<=n;i++){
		par[i]=i;
		e[i].pb(i);
	}
	for(int i=1;i<=m;i++){
		int u,v,w;cin>>u>>v>>w;
		q.push({w,{u,v}});
	}ll ans=0;
	while(!q.empty()){
		ll d=q.top().ff;
		ll nd=q.top().ss.ff;
		ll nd2=q.top().ss.ss;
		q.pop();
		if(par[nd]==par[nd2]) continue;
		dsu(nd,nd2);
		ans+=d;
	}cout<<ans;
}
signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr); cout.tie(NULL);
    //freopen("input.txt","r",stdin);
    //freopen("output.txt","w",stdout);
    ll t=1; //cin>>t;
    while(t--) solve();
    return 0;
}