#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")