#include <iostream>
#include <cstdlib>
#include <algorithm>
#include <cstring>
#define INF 1<<29
using namespace std;
int V;
int cost[1000][1000],mincost[1000];
bool used[1000];
bool connect[1000];

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

  mincost[0]=0;
  
 
  while(true)
    {
 int v = -1;
      for(int i=0;i<V;i++)
	{
	  if(connect[i] && !used[i] && (v == -1 ||  mincost[i] < mincost[v]))v = i;
	}
      
      if(v == -1)break;
      used[v] = true;
      res += mincost[v];
      
      for(int i=0;i<V;i++)
	{
	  mincost[i] = min(mincost[i],cost[v][i]);
	}

    }
  
  return res;
}




int main()
{
  int m,a,b;

  while(true)
    {
      cin >> V >> m;
      if(V == 0 && m == 0)break;
      for(int i=0;i<V;i++)for(int j=0;j<V;j++)cost[i][j] = INF;
      memset(connect,false,sizeof(connect));
      for(int i=0;i<m;i++)
	{
	  cin >> a >> b;
	  cin >> cost[a][b];
	  cost[b][a] = cost[a][b];
	  connect[a] = true;
	  connect[b] = true;
	}
      cout << prime() << endl;
    }
}