#include<bits/stdc++.h>
using namespace std;
const int N=(int)1e5+10;
struct Edge{
int a,b,c;
}edge[N];
int fa[N];
void init(int n){for(int i=1;i<=n;i++) fa[i]=i;}
int find(int x){return fa[x]==x?x:fa[x]=find(fa[x]);}
void add(int a,int b){fa[find(a)]=find(b);}
bool cmp(Edge x,Edge y){return x.c<y.c;}
int main(){
int n,m,cnt=0,ret=0;
scanf("%d%d",&n,&m);
init(n);
for(int i=1;i<=m;i++){
scanf("%d%d%d",&edge[i].a,&edge[i].b,&edge[i].c);
add(edge[i].a,edge[i].b);
}
sort(edge+1,edge+m+1,cmp);
for(int i=1;i<=m;i++){
int tx=find(edge[i].a),ty=find(edge[i].b);
if(tx!=ty){
ret+=edge[i].c;
cnt++;
}
}
if(cnt!=n-1) printf("-1\n");
else printf("%d\n",ret);
return 0;
}