#pragma GCC optimize("O3")
#include <bits/stdc++.h>
using namespace std;
int n, k, x, y, w, t = 0;
bool ok[200001];
long long cnt, d[200001], need[200001], cover[200001], S;
vector<pair<int, int>> ke[200001];
vector<pair<long long, int>> a;
vector<int> ans;
vector<int> trace;
void dfs(int u, int p){
need[u]=0;
cover[u]=1e18;
for(auto [v, w] : ke[u]){
if(v==p)continue;
dfs(v, u);
if(need[v]!=-1){
if(need[v]+w>S){
trace.push_back(v);
cover[u]=min(cover[u], 1LL*w);
}
else {
need[u]=max(need[u], need[v]+w);
}
}
if(cover[v]!=1e18){
cover[u]=min(cover[u], cover[v]+w);
}
}
if(need[u]+cover[u]<=S)need[u]=-1;
}
bool check(long long pp){
trace.clear();
S=pp;
dfs(1, 0);
if(need[1]!=-1)trace.push_back(1);
if(trace.size()<=k){
ans=trace;
return true;
}
return false;
}
int main(){
ios::sync_with_stdio(0);cin.tie(nullptr);
cin >> n >> k;
for(int i = 1; i < n; i++){
cin >> x >> y >> w;
ke[x].push_back({y, w});
ke[y].push_back({x, w});
}
dfs(1, 0);
long long vt=-1, l=1, r=2e14, mid;
while(l <= r){
mid = (l + r) / 2;
if(check(mid)){
vt = mid;
r = mid - 1;
}else l = mid + 1;
}
cout<<vt<<"\n";
for(int v : ans) ok[v]=true;
int m=ans.size();
vector<int> nans;
for(int i=1;i<=n;i++){
if(ok[i])nans.push_back(i);
else if(m<k){
m++;
nans.push_back(i);
}
}
for(int j=0;j<(int)nans.size()-1;j++)cout<<nans[j]<<" ";
cout<<nans.back();
return 0;
}