#include <iostream>
#include <algorithm>
#include <cmath>
#define maxn 110
using namespace std;
int fa[maxn];

int find(int x)
{
    if(x==fa[x])return x;
    return fa[x] = find(fa[x]);
}

typedef struct Link{
    int a;
    int b;
    int w;
}L;

bool cmp(L l1,L l2)
{
    return l1.w<l2.w;
}


int main() {
    int N,M;
    while(cin>>N>>M)
    {
        if(N==0)break;
        L link[maxn];
        for(int i=0;i<=M;i++)fa[i]=i;
        for(int i=0;i<N;i++)
        {
            cin>>link[i].a>>link[i].b>>link[i].w;
        }
        sort(link,link+N,cmp);
        int ans=0;
        for(int i=0;i<N;i++)
        {
            int f1 = find(link[i].a);
            int f2 = find(link[i].b);
            if(f1!=f2)
            {
                fa[f1] = f2;
                ans += link[i].w;
            }
        }
        int cnt=0;
        for(int i=1;i<=M;i++)
        {
            if(fa[i]==i)cnt++;
        }
        if(cnt>1)cout<<"?"<<endl;
        else cout<<ans<<endl;




    }


}
// 64 位输出请用 printf("%lld")