1 #include <iostream>
2 #include <cstdio>
3 #include <cstdlib>
4 #include <cmath>
5 #include <cctype>
6 #include <cstring>
7
8 #include <vector>
9 #include <deque>
10 #include <list>
11 #include <map>
12 #include <set>
13 #include <stack>
14 #include <queue>
15 #include <algorithm>
16 #include <string>
17
18
19 #define MAXD 99999999
20 using namespace std;
21
22 int g[101][101];
23
24 int vis[101];
25
26 int lowcost[101];
27
28
29
30
31 int main()
32 {
33 int n,m;
34
35 int i,j,k;
36
37 while(scanf("%d%d",&m,&n)!=EOF)
38 {
39 if(m==0)
40 break;
41
42 for(i=1;i<=n;i++)
43 for(j=1;j<=n;j++)
44 g[i][j]=MAXD;
45
46
47
48 for(i=0;i<m;i++)
49 {
50
51 int a,b,c;
52
53 scanf("%d%d%d",&a,&b,&c);
54
55 if(g[a][b]>c)
56 {g[a][b]=g[b][a]=c;}
57
58 }
59
60
61 int mincost=0;
62
63 for(i=1;i<=n;i++)
64 {
65 vis[i]=0;
66 lowcost[i]=g[1][i];
67 }
68
69
70 vis[1]=1;
71
72 int tag=0;
73
74
75
76 for(i=1;i<n;i++)
77 {
78 k=-1;
79 int temp=MAXD;
80
81 for(j=1;j<=n;j++)
82 {
83 if(vis[j]==0)
84 {
85 if(temp>lowcost[j])
86 {
87 k=j;temp=lowcost[j];
88 }
89 }
90 }
91
92 if(k==-1)
93 {tag=1;break;}
94
95 vis[k]=1;
96
97 mincost+=lowcost[k];
98
99
100 for(j=1;j<=n;j++)
101 {
102 if(vis[j]==0)
103 {
104 if(lowcost[j]>g[k][j])
105 {lowcost[j]=g[k][j];}
106 }
107 }
108 }
109
110
111 if(tag==0)
112 {
113 cout<<mincost<<endl;
114 }
115 else
116 {
117 cout<<"?"<<endl;
118 }
119 }
120
121
122
123
124
125 return 0;
126 }