#include<iostream>
#include<memory.h>
#define MAX 0x3f3f3f3f
#define N 110
using namespace std;
int low[N],map[N][N],visit[N];
int n;
int prim()//普里姆算法
{
int i,j,pos,min,result=0;
memset(visit,0,sizeof(visit));
visit[1]=1; pos=1;
for(i=1;i<=n;i++)
if(i!=pos) low[i]=map[pos][i];
for(i=1;i<n;i++)
{
min=MAX;
for(j=1;j<=n;j++)
{
if(visit[j]==0 && min>low[j])
{
min=low[j]; pos=j;
}
}
if(MAX==min)
{
return -1;
}
result+=min;
visit[pos]=1;
for(j=1;j<=n;j++)
{
if(visit[j]==0 && low[j]>map[pos][j])
low[j]=map[pos][j];
}
}
return result;
}
int main()
{
int m,a,b,c,k,i;
while(cin>>n>>m)
{
memset(map,MAX,sizeof(map));
for(i=1;i<=m;i++)
{
cin>>a>>b>>c;
if(map[a][b]>c)//居然还有相同边....醉了...
{
map[a][b]=map[b][a]=c;
}
}
k=prim();
cout<<k<<endl;
}
return 0;
}