1 #include <iostream>
2 #include <cstdio>
3 #include <cmath>
4 #include <cstring>
5 #include <algorithm>
6 #include <queue>
7 #include <stack>
8 #include <vector>
9 using namespace std;
10 const int N=300;
11 const int ma=100000000;
12 int main(int argc, char *argv[])
13 {
14 int n,m,cost[N][N],d[N],vis[N],ans;
15 while(scanf("%d%d",&n,&m)!=EOF)
16 {
17 if(n==0)
18 break;
19 for(int i=1;i<m;i++)
20 {
21 for(int j=1;j<=m;j++)
22 {
23 if(i==j)
24 cost[i][j]=0;
25 else
26 cost[i][j]=ma;
27 }
28 }
29 for(int i=0;i<n;i++)
30 {
31 int a,b,c;
32 scanf("%d%d%d",&a,&b,&c);
33 cost[a][b]=c;cost[b][a]=c;
34 }
35 memset(d,0,sizeof(d));
36 memset(vis,0,sizeof(vis));
37
38 d[1]=0;ans=0;
39 for(int i=1;i<=m;i++)
40 {
41 d[i]=cost[1][i];
42 }
43
44 for(int i=1;i<=m;i++)
45 {
46 int k;
47 int min=ma;
48 for(int j=1;j<=m;j++)
49 {
50 if(vis[j]==0&&d[j]<min)
51 {
52 k=j;
53 min=d[j];
54 }
55
56 }
57 if(min==ma)
58 {
59 printf("?\n");
60 ans=-1;
61 break;
62 }
63 vis[k]=1;
64 ans+=min;
65 for(int j=1;j<=m;j++)
66 {
67 if(vis[j]==0&&d[j]>cost[k][j])
68 {
69 d[j]=cost[k][j];
70 }
71 }
72 }
73 if(ans!=-1)
74 printf("%d\n",ans);
75 }
76 }