#pragma GCC optimize("O3")
#include <bits/stdc++.h>
#define file(name) freopen(name".inp", "r", stdin);freopen(name".out", "w", stdout);
#define ll long long
#define all(x) x.begin(),x.end()
using namespace std;
const int N=2e5+5;
int n, k, cur;
ll fu[N], nanh[N];
bool park[N];
vector <pair<int, int>> G[N];
void dfs(int u, int p, ll d){
for (auto [v, w]:G[u]){
if (v==p)continue;
dfs(v, u, d);
if (fu[v]!=-1){
if (fu[v]+w>d){
++cur;
nanh[u]=min(nanh[u], (ll)w);
}
else fu[u]=max(fu[u], fu[v]+w);
}
if (nanh[v]<1e18)nanh[u]=min(nanh[u], nanh[v]+w);
}
if (fu[u]!=-1 && nanh[u]<1e18 && fu[u]+nanh[u]<=d)fu[u]=-1;
}
void dfs2(int u, int p, ll d){
for (auto [v, w]:G[u]){
if (v==p)continue;
dfs2(v, u, d);
if (fu[v]!=-1){
if (fu[v]+w>d){
park[v]=1;
nanh[u]=min(nanh[u], (ll)w);
}
else fu[u]=max(fu[u], fu[v]+w);
}
if (nanh[v]<1e18)nanh[u]=min(nanh[u], nanh[v]+w);
}
if (fu[u]!=-1 && nanh[u]<1e18 && fu[u]+nanh[u]<=d)fu[u]=-1;
}
bool okiee(ll d){
memset(nanh, 0x3f, sizeof nanh);
memset(fu, 0, sizeof fu);
cur=0;
dfs(1, 1, d);
if (fu[1]!=-1)++cur;
return cur<=k;
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n>>k;
ll l=2e14, r=l;
for (int i=1;i<n;++i){
int u, v, w;
cin>>u>>v>>w;
G[u].push_back({v, w});
G[v].push_back({u, w});
l=min(l, (ll)w);
}
ll res=0;
while (l<=r){
ll mid=l+r>>1;
if (okiee(mid)){
res=mid;
r=mid-1;
}
else l=mid+1;
}
cout<<res<<"\n";
memset(nanh, 0x3f, sizeof nanh);
memset(fu, 0, sizeof fu);
dfs2(1, 1, res);
if (fu[1]!=-1)park[1]=1;
int cnt=0;
for (int i=1;i<=n;++i)
if (park[i]){
cout<<i<<" ";
++cnt;
}
for (int i=1;i<=n;++i){
if (cnt==k)break;
if (!park[i]){
cout<<i<<" ";
++cnt;
}
}
return 0;
}