#include <bits/stdc++.h>
using namespace std;
#define READ(f) freopen(f, "r", stdin)
#define WRITE(f) freopen(f, "w", stdout)
#define rep(i,n) for(int i = 0 ; i < (n) ; i++)
#define iter(i,a,b) for(int i = (a) ; i < (b) ; i++)
#define mem(a,b) memset(a,b,sizeof(a))
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<int,pii> iii;
typedef vector <pii> vii;
#define INF 1000000000
#define MAXX 200005
vii adj_l[MAXX];
vector<bool> taken;
priority_queue<pii> pq;
int V, E;
void init(){
rep(i, MAXX){
adj_l[i].clear();
}
taken.clear();
while(!pq.empty())
pq.pop();
}
void input(int u, int v, int w){
adj_l[u].push_back(make_pair(v, w));
adj_l[v].push_back(make_pair(u, w));
}
void process(int src){
taken[src] = true;
rep(i, (int)adj_l[src].size()){
pii v = adj_l[src][i];
if(!taken[v.first])
pq.push(pii(-v.second, -v.first));
}
}
int primMST(int src){
process(src);
int mst_cost = 0;
while(!pq.empty()){
pii nxt = pq.top();
pq.pop();
int u = -nxt.second;
int w = -nxt.first;
if(!taken[u]){
mst_cost += w;
process(u);
}
}
printf("%d\n", mst_cost);
}
int main(){
//READ("UVa 11631.txt");
int u, v, w;
while(1){
cin>>V>>E;
if(V == 0 && E == 0)
break;
init();
rep(i, E){
cin>>u>>v>>w;
input(u, v, w);
}
primMST(0);
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKI2RlZmluZSBSRUFEKGYpIGZyZW9wZW4oZiwgInIiLCBzdGRpbikKI2RlZmluZSBXUklURShmKSBmcmVvcGVuKGYsICJ3Iiwgc3Rkb3V0KQoKI2RlZmluZSByZXAoaSxuKSBmb3IoaW50IGkgPSAwIDsgaSA8IChuKSA7IGkrKykKI2RlZmluZSBpdGVyKGksYSxiKSBmb3IoaW50IGkgPSAoYSkgOyBpIDwgKGIpIDsgaSsrKQojZGVmaW5lIG1lbShhLGIpIG1lbXNldChhLGIsc2l6ZW9mKGEpKQoKdHlwZWRlZiBsb25nIGxvbmcgbGw7CnR5cGVkZWYgcGFpcjxpbnQsaW50PiBwaWk7CnR5cGVkZWYgcGFpcjxpbnQscGlpPiBpaWk7CnR5cGVkZWYgdmVjdG9yIDxwaWk+IHZpaTsKCiNkZWZpbmUgSU5GIDEwMDAwMDAwMDAKI2RlZmluZSBNQVhYIDIwMDAwNQoKdmlpIGFkal9sW01BWFhdOwp2ZWN0b3I8Ym9vbD4gdGFrZW47CnByaW9yaXR5X3F1ZXVlPHBpaT4gcHE7CmludCBWLCBFOwoKdm9pZCBpbml0KCl7CglyZXAoaSwgTUFYWCl7CgkJYWRqX2xbaV0uY2xlYXIoKTsKCX0KCXRha2VuLmNsZWFyKCk7Cgl3aGlsZSghcHEuZW1wdHkoKSkKCQlwcS5wb3AoKTsKfQoKdm9pZCBpbnB1dChpbnQgdSwgaW50IHYsIGludCB3KXsKCWFkal9sW3VdLnB1c2hfYmFjayhtYWtlX3BhaXIodiwgdykpOwoJYWRqX2xbdl0ucHVzaF9iYWNrKG1ha2VfcGFpcih1LCB3KSk7Cn0KCnZvaWQgcHJvY2VzcyhpbnQgc3JjKXsKCXRha2VuW3NyY10gPSB0cnVlOwoJcmVwKGksIChpbnQpYWRqX2xbc3JjXS5zaXplKCkpewoJCXBpaSB2ID0gYWRqX2xbc3JjXVtpXTsKCQlpZighdGFrZW5bdi5maXJzdF0pCgkJCXBxLnB1c2gocGlpKC12LnNlY29uZCwgLXYuZmlyc3QpKTsKCX0KfQoKaW50IHByaW1NU1QoaW50IHNyYyl7Cglwcm9jZXNzKHNyYyk7CglpbnQgbXN0X2Nvc3QgPSAwOwoJd2hpbGUoIXBxLmVtcHR5KCkpewoJCXBpaSBueHQgPSBwcS50b3AoKTsKCQlwcS5wb3AoKTsKCQlpbnQgdSA9IC1ueHQuc2Vjb25kOwoJCWludCB3ID0gLW54dC5maXJzdDsKCQlpZighdGFrZW5bdV0pewoJCQltc3RfY29zdCArPSB3OwoJCQlwcm9jZXNzKHUpOwoJCX0KCX0KCXByaW50ZigiJWRcbiIsIG1zdF9jb3N0KTsKfQoKaW50IG1haW4oKXsKCS8vUkVBRCgiVVZhIDExNjMxLnR4dCIpOwoJaW50IHUsIHYsIHc7Cgl3aGlsZSgxKXsKCQljaW4+PlY+PkU7CgkJaWYoViA9PSAwICYmIEUgPT0gMCkKCQkJYnJlYWs7CgkJaW5pdCgpOwoJCXJlcChpLCBFKXsKCQkJY2luPj51Pj52Pj53OwoJCQlpbnB1dCh1LCB2LCB3KTsKCQl9CgkJcHJpbU1TVCgwKTsKCX0KCXJldHVybiAwOwp9Cgo=