
// O(n'2 + e)
// テ」ツδ療」ツδェテ」ツδ?ヲツウツ?

#include <iostream>
#include <algorithm>
#define MAX 100
#define INF 999999

using namespace std;

int cost[MAX + 1][MAX + 1];
int mincost[MAX + 1];
bool used[MAX + 1];

int prim(int V){ // テ」ツδ偲」ツδシテ」ツδ嘉ヲツ閉ー

  for(int i = 0 ; i < V ; i++){ // テ・ツ按敕ヲツ慊淌・ツ個?
    mincost[i] = INF;
    used[i] = false;
  }

  mincost[0] = 0; 
  int res = 0 ; 

  while(true){
    int v = -1;
    for(int u = 0 ; u < V ; u++){
      if(!used[u] && (v == -1 || mincost[u] < mincost[v])) v = u;
      // テ、ツスツソテ」ツ?」テ」ツ?ヲテ」ツ?ェテ」ツ??」ツつ?」ツ?、テ」ツ?ァテヲツ慊?」ツつづ・ツーツ湘」ツ?陛」ツ??ostテ」ツ?ョテヲツキツサテ・ツュツ療」ツつ津ヲツ篠「テ」ツ??
    }
    if(v == -1) break;
    used[v] = true; // テ」ツ?凖」ツ?ァテ」ツ?ォテ、ツスツソテ」ツ?」テ」ツ?淌」ツ?禿」ツ?ィテ」ツ?ォテ」ツ?凖」ツつ?
    res += mincost[v];

    for(int u = 0 ; u < V ; u++){
      mincost[u] = min(mincost[u], cost[v][u]);
      // mincostテ」ツ?ョテァツ「ツコテ・ツョツ?
    }
  }
  return res;
}

int main(void){

  int n, m;
  while(cin >> n >> m, n + m){

    fill(cost[0], cost[MAX], INF);

    for(int i = 0 ; i < m ; i++){
      int a, b, c;
      cin >> a >> b >> c;
      cost[a][b] = cost[b][a] = c;
    }
    cout << prim(n) << endl;
  }
  return 0;
}