#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pll;
typedef pair<int,pll> P;
struct unionfind{
  int par[110]; // 親ノード  必要に応じて要素数を変えよう
  int rank[110]; // ランク　必要に応じて要素数を変えよう
  unionfind(int n){
    init(n);
  }
  void init(int n){
    for(int i=0;i<=n;i++){
      par[i]=i;
      rank[i]=1;
    }
  }
  int root(int x) {
    if (par[x] == x) {
      return x;
    }
    else {
      return par[x] = root(par[x]);
    }
  }
  int size(int x){
    return rank[root(x)];
  }
  bool same(int x,int y) {
    return root(x) == root(y);
  }
  void unite(int x,int y) {
    x=root(x);
    y=root(y);
    if(x==y){
      return;
    }
    if(rank[x]<rank[y]){
      swap(x,y);
    }
    rank[x]=rank[x]+rank[y];
    par[y]=x;
  }
};
int main(){
  while(1){
    int n,m,i;
    cin >> n >> m;
    if(n==0 && m==0){
      return 0;
    }
    unionfind tree(n);
    vector<P> g;
    for(i=0;i<m;i++){
      int a,b,c;
      cin >> a >> b >> c;
      g.push_back(make_pair(c,pll(a,b)));
    }
    sort(g.begin(),g.end());
    int ans=0;
    for(i=0;i<m;i++){
      if(!tree.same(g[i].second.first,g[i].second.second)){
        tree.unite(g[i].second.first,g[i].second.second);
        ans+=g[i].first;
      }
    }
    cout << ans << endl;
  }
}
