#include<stdio.h>
#include<algorithm>
#include<iostream>
#include <math.h>
using namespace std;
struct node
{
int s,e;
int val;
} flag[1200000];
int map1[1200000];
int cmp(node a,node b)
{
if(a.val<b.val)
return 1;
else return 0;
}
int cmp1(const void *a,const void *b)
{
struct node *c,*d;
c=(struct node *)a;
d=(struct node *)b;
return c->val-d->val;
}
void init(long long m)
{
for(int i=1; i<=m; i++)
map1[i]=i;
}
int find1(int x)
{
int r=x;
while(r!=map1[r])
r=map1[r];
int b=x;
int f;
while(b!=r)
{
f=map1[b];
map1[b]=r;
b=f;
}
return r;
}
int merge1(int x,int y)
{
int fx=find1(x);
int fy=find1(y);
if(fx!=fy)
{
map1[fx]=fy;
return 1;
}
return 0;
}
int main()
{
long long n=0,m=0;
while(scanf("%lld",&n)!=EOF)
{
if(n==0)break;
scanf("%lld",&m);
for(int i=0; i<m; i++)
{
scanf("%d%d%d",&flag[i].s,&flag[i].e,&flag[i].val);
}
qsort(flag,m,sizeof(flag[0]),cmp1);
long long sum=0,ans=0;
init(m);
for(int i=0; i<m; i++)
{
ans=merge1(flag[i].s,flag[i].e);
if(ans)
sum+=flag[i].val;
}
printf("%lld\n",sum);
}
return 0;
}