#include<bits/stdc++.h>
using namespace std;
#define MAX 15000
int fa[MAX],ans,M,N;
struct TOWN
{
int a,b,c;
bool operator<(TOWN t){
return c<t.c;
}
}t[MAX];
int find(int r)
{
if(r!=fa[r])
{
fa[r]=find(fa[r]);
}
return fa[r];
}
void merge(TOWN &t)
{
int t1=find(t.a);
int t2=find(t.b);
if(t1!=t2)
{
fa[t1]=t2;
ans += t.c;
}
}
int main(void)
{
while(scanf("%d %d",&N,&M),N)
{
for(int i=1;i<=N;i++)
{
scanf("%d %d %d",&t[i].a,&t[i].b,&t[i].c);
}
sort(t+1,t+N+1);
for(int i=0;i<=M;i++)
{
fa[i]=i;
}
ans=0;
for(int i=1;i<=N;i++)
{
merge(t[i]);
}
for(int i=1;i<=M;i++)
{
if(i==fa[i])
{
fa[0]++;
}
}
if(1==fa[0]) printf("%d\n",ans);
else printf("?\n");
}
return 0;
}