#include <bits/stdc++.h>
using namespace std;
struct edge{int u,v,cost;};
bool comp(const edge& e1,const edge& e2){return e1.cost<e2.cost;}

int par[101],cost[101];
void init(int n){
	for(int i=0;i<n;i++)par[i]=i,cost[i]=0;
}
int find(int n){
	if(n==par[n])return n;
	return par[n]=find(par[n]);
}
void unite(int x,int y){
	x=find(x),y=find(y);
	if(x==y)return;
	if(cost[x]<cost[y])par[x]=y;
	else{
		par[y]=x;
		if(cost[x]==cost[y])cost[x]++;
	}
}
bool same(int x,int y){
	return find(x)==find(y);
}

int main(){
	int n,m;
	while(cin>>n>>m,n){
		int ans=0;
		edge es[m];
		for(int i=0;i<m;i++)cin>>es[i].u>>es[i].v>>es[i].cost;
		sort(es,es+m,comp);
		init(n);
		for(int i=0;i<m;i++){
			edge e=es[i];
			if(!same(e.u,e.v)){
				unite(e.u,e.v);
				ans+=e.cost;
			}
		}
		cout<<ans<<endl;
	}
}