#include<bits/stdc++.h>
using namespace std;
struct edge{
int node,val;
};
bool z[5005];
int n,m,X,Y,Z,a=1,b[5005],c,d,f;
long long ans;
vector<edge>e[5005];
bool pd(){
for(int i=1;i<=n;i++){
if(z[i]==0)return 1;
}
return 0;
}
void dfs(int x){
z[x]=1;
for(int i=0;i<e[x].size();i++){
if(!z[e[x][i].node]){
dfs(e[x][i].node);
}
}
}
bool cmp(edge x,edge y){
return x.val>y.val;
}
int main(){
cin>>n>>m;
for(int i=1;i<=m;i++){
cin>>X>>Y>>Z;
e[X].push_back({Y,Z});
e[Y].push_back({X,Z});
}
dfs(1);
if(pd()){
cout<<"orz"<<endl;
return 0;
}
for(int i=1;i<=n;i++){
sort(e[i].begin(),e[i].end(),cmp);
}
memset(z,0,sizeof(z));
z[1]=1;
b[1]=1;
while(n!=a){
c=99999;
for(int i=1;i<=a;i++){
for(int j=e[b[i]].size()-1;j>=0;j--){
if(e[b[i]][j].val>=c)break;
else{
if(!z[e[b[i]][j].node]){
c=e[b[i]][j].val;
d=i;
f=j;
break;
}
}
}
}
b[++a]=e[d][f].node;
swap(e[d][f],e[d][e[d].size()-1]);
e[d].pop_back();
ans+=c;
z[d]=1;
}
cout<<ans<<endl;
return 0;
}