#include<iostream>
using namespace std;
#define MAX_N 111
struct edge{
int from,to;
long long cost;
}E[MAX_N*MAX_N];
bool cmp(edge a,edge b){
return a.cost<b.cost;
}
int M,N;
int father[MAX_N];
void init(){
for(int i=1;i<=N;i++){
father[i]=i;
}
}
int Find(int x){
if(x==fahter[x]) return x;
return father[x]=Find(father[x]);
}
bool Same(int x,int y){
return Find(x)==Find(y);
}
void unionSet(int x,int y){
int u=Find(x);
int v=Find(y);
if(u==v) return;
father[u]=v;
}
void Kruskal(){
long long res=0;
std::sort(E+1,E+1+M,cmp);
for(int i=1;i<=N;i++){
if(Same(E[i].from,E[i].to)) continue;
unionSet(E[i].from,E[i].to);
res+=E[i].cost;
}
return res;
}
int main(){
while(scanf("%d %d",&M,&N)==2){
if(M==0) break;
init();
for(int i=1;i<=N;i++){
scanf("%d%d%lld",&E[i].from,&E[i].to,&E[i].cost);
}
long long res=Kruskal();
for(int i=1;i<=N;i++){
if(!Same(i,1))
res=-1;
else
printf("%lld",res);
}
}
return 0;
}