#include
#include<bits/stdc++.h>
using namespace std;
void addEdge(vector<pair<int, int>>adj[], int u, int v, int data) {
adj[u].push_back(make_pair(v, data));
adj[v].push_back(make_pair(u, data));
}
int minv( unordered_map<int, int>dist,int v,int vis[]){
int minvertex=-1;
for(int i=0;i<v;i++){
if(vis[i]==0&&(minvertex==-1||(dist[minvertex]>dist[i]))){
minvertex=i;
}
}
return minvertex;
}
int prim(vector<pair<int, int>>adj[], int v) {
unordered_map<int, int>dist;
int vis[v];
int parent[v];
for (int i = 0; i < v; i++) {
dist[i] = INT_MAX;
vis[i]=0;
}
int minvertex;
dist[0] = 0;
parent[0]=-1;
for(int i=0;i<v;i++){
minvertex=minv(dist,v,vis);
vis[minvertex]=1;
for(int j=0;j<adj[minvertex].size();j++){
pair<int,int>x=adj[minvertex][j];
int r=x.first;
int s=x.second;
if(vis[r]==0){
if(dist[r]>s){
dist[r]=s;
parent[r]=minvertex;
}}
}
}
int sum=0;
for(int i=1;i<v;i++){
int j=parent[i];
pair<int,int>d=adj[i][j];
sum=sum+d.second;
}
return sum;
}
int main() {
int v;
cin >> v;
int e;
cin >> e;
vector<pair<int, int>>adj[v];
for (int i = 0; i < e; i++) {
int a, b, c;
cin >> a >> b >> c;
addEdge(adj, a-1, b-1, c);
}
cout<<prim(adj, v);
cout << "\n" ;
}