#include<bits/stdc++.h>

#define MAX_E 501
#define MAX_V 101
#define INF 1e9

using namespace std;

int cost[MAX_V][MAX_V]; // cost[u][v]テ」ツ?ッティツセツコe=(u,v)テ」ツ?ョテ」ツつウテ」ツつケテ」ツδ?テ・ツュツ佚・ツ慊ィテ」ツ?療」ツ?ェテ」ツ??・ツ?エテ・ツ青暗」ツ?ッINF)
int mincost[MAX_V]; // テゥツ崢?・ツ青?テ」ツ?凝」ツつ嘉」ツ?ョティツセツコテ」ツ?ョテヲツ慊?・ツーツ湘」ツつウテ」ツつケテ」ツδ?
bool used[MAX_V];   // テゥツ?づァツつケiテ」ツ?傾テ」ツ?ォテ・ツ青ォテ」ツ?セテ」ツつ古」ツ?ヲテ」ツ??」ツつ凝」ツ??
int V;

int prim() {
  for (int i = 0; i < V; ++i) {
    mincost[i] = INF;
    used[i] = false;
  }
  mincost[0] = 0;
  int res = 0;

  while (true) {
    int v = -1;
    // Xテ」ツ?ォテ・ツアツ榲」ツ?陛」ツ?ェテ」ツ??ゥツ?づァツつケテ」ツ?ョテ」ツ??」ツ?。Xテ」ツ?凝」ツつ嘉」ツ?ョティツセツコテ」ツ?ョテ」ツつウテ」ツつケテ」ツδ暗」ツ?古ヲツ慊?・ツーツ湘」ツ?ォテ」ツ?ェテ」ツつ凝ゥツ?づァツつケテ」ツつ津ヲツ篠「テ」ツ??
    for (int u = 0; u < V; u++) {
      if (!used[u] && (v == -1 || mincost[u] < mincost[v]))
        v = u;
    }

    if (v == -1)
      break;
    used[v] = true;    // テゥツ?づァツつケvテ」ツつ湛テ」ツ?ォティツソツステ・ツ環?
    res += mincost[v]; // ティツセツコテ」ツ?ョテ」ツつウテ」ツつケテ」ツδ暗」ツつ津・ツ環?」ツ?暗」ツつ?

    for (int u = 0; u < V; u++) {
      mincost[u] = min(mincost[u], cost[v][u]);
    }
  }

  return res;
}

int main(){
    int n, m;
    while(cin >> n >> m, n != 0 || m != 0){
        V = n;
        for(int i=0;i<MAX_V;++i)
            for(int j=0;j<MAX_V;++j)
                cost[i][j] = INF;
        for(int i=0;i<m;++i){
            int a, b, c;
            cin >> a >> b >> c;
            cost[a][b] = c;
            cost[b][a] = c;
        }
        cout << prim() << endl;
    }

    return 0;
}
