#include<cstdio>
#include<algorithm>
#include<iostream>
#include<vector>
#include<set>
#include<queue>

using namespace std;

#define rep(i,n) for(int i=0;i<int(n);i++)
#define reps(i,n) for(int i=1;i<=int(n);i++)

#define f first
#define s second

class E{
	public:
	int a,b,v;
	E(int a,int b,int v):a(a),b(b),v(v){}
	bool operator<(const E&a)const{
		return v<a.v;
	}
};


class T{
	public:
	int bef;
	vector<int> ko;
};

T uf[111];


void ufto(int a,int b){
	uf[b].bef = a;
	uf[a].ko.push_back(b);
	
	rep(i,uf[b].ko.size()){
		ufto(a,uf[b].ko[i]);
	}
	uf[b].ko.clear();
}

int find(int a){
	return uf[a].bef;
}
void unit(int a,int b){
	ufto(find(a),find(b));
}
int check(int a,int b){
	return find(a)==find(b);
}

int main(){
	while(1){
		rep(i,111){
			uf[i].bef=i;
			uf[i].ko.clear();
		}
		int n,m;
		cin>>n>>m;
		
		if(n==0)break;
		
		vector<E> ed;
		
		rep(i,m){
			int a,b,c;
			cin>>a>>b>>c;
			
			ed.push_back(E(a,b,c));
		}
		
		
		sort(ed.begin(),ed.end());
		
		
		int ans=0;
		rep(i,m){
			if(check(ed[i].a,ed[i].b)==0){
				ans+=ed[i].v;
				unit(ed[i].a,ed[i].b);
			}
		}
		
		printf("%d\n",ans);
	}
}
/*
5 6
0 2 1
2 1 3
2 3 8
1 3 2
3 4 5
1 4 4

*/