#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;

struct Edge{
	int a,b,cost;
	bool operator <(const Edge &a)const{
		return cost<a.cost;
	}
};

int par[100],rank_[100];

void init(int n){
	for(int i=0;i<n;i++) par[i] = i, rank_[i] = 1;
}

int find(int x){
	if(par[x]==x) return x;
	return par[x] = find(par[x]);
}

bool unite(int a_,int b_){
	int a = find(a_), b = find(b_);
	if(a==b) return false;
	if(rank_[a]<rank_[b]){
		par[a] = b;
	}
	else{
		par[b] = a;
		if(rank_[a]==rank_[b]) rank_[a]++;
	}
	return true;
}

int main(){
	int N,M;
	Edge e[10000];
	while(cin>>N>>M,N||M){
		init(N);
		for(int i=0;i<M;i++) cin>>e[i].a>>e[i].b>>e[i].cost;
		sort(e,e+M);
		int ans = 0;
		for(int i=0;i<M;i++){
			if(unite(e[i].a,e[i].b)) ans += e[i].cost;
		}
		printf("%d\n",ans);
	}
	return 0;
}