/*
#include <bits/stdc++.h>
#pragma GCC optimize("O3")
#define ford(a,b,c) for(int a = b; a <= c; a++)
#define fti(a,b,c) for(int a = b; a >= c; a--)
#define file(name) freopen(name ".inp", "r", stdin); freopen(name ".out", "w", stdout);
#define siz size()
#define pll pair<long long,long long>
#define pii pair<int,int>
#define ll long long
#define ms(a,b) for(int i=0;i<=a.siz;i++) a[i]=b;
#define all(a) a.begin(),a.end()
#define pb push_back
#define fi first
#define se second
using namespace std;
int n,k;
ll cur=1e18,mx,mn,ans;
vector<pii> a[200005];
vector<int> kq;
bool ispark[200005];
void dfs(int u,int p,ll sum){
if(ispark[u]){
mn=min(mn,sum);
return;
}
for(auto [v,w]:a[u]){
if(v==p) continue;
dfs(v,u,sum+w);
}
}
void sub1(){
for(int mask=1;mask<=(1<<(n-1));mask++){
if(__builtin_popcount(mask)!=k) continue;
ford(i,0,n-1){
if((mask>>i)&1) {
ispark[i+1]=true;
}
else ispark[i+1]=false;
}
mx=0;
mn=1e18;
ford(i,1,n)
if(!ispark[i]){
mn=1e18;
dfs(i,0,0);
mx=max(mx,mn);
}
if(mx<cur){
cur=mx;
ans=mask;
}
}
ford(i,0,n-1){
if((ans>>i)&1) kq.pb(i+1);
}
cout << cur << "\n";
for(int i:kq) cout << i << " ";
}
int st,fn;
ll d1[200005],d2[200005];
void dfsu(int u,int p,ll cnt){
if(mx<cnt){
mx=cnt;
st=u;
}
for(auto [v,w]:a[u]){
if(v==p) continue;
dfsu(v,u,cnt+w);
}
}
void dfs2(int u,int p,ll cnt){
d1[u]=cnt;
if(mx<cnt){
mx=cnt;
fn=u;
}
for(auto [v,w]:a[u]){
if(v==p) continue;
dfs2(v,u,w+cnt);
}
}
void dfs3(int u,int p,ll cnt){
d2[u]=cnt;
for(auto [v,w]:a[u]){
if(v==p) continue;
dfs3(v,u,w+cnt);
}
}
void sub2(){
ans=1e18;
cur=0;
dfsu(1,0,0);
mx=0;
dfs2(st,0,0);
dfs3(fn,0,0);
ford(i,1,n){
if(ans>max(d1[i],d2[i])){
ans=max(d1[i],d2[i]);
cur=i;
}
}
cout << ans << "\n" << cur;
}
bool checksub3=true;
ll pre[200005],l=0,r;
bool check(ll mid){
int i=1,dem=0;
while(i<=n){
i=upper_bound(pre+1,pre+n+1,mid-pre[i])-pre;
if(i==n) break;
dem++;
}
if(dem<=k) return 1;
return 0;
}
void check1(ll mid){
int i=1,dem=0;
while(i<=n){
i=upper_bound(pre+1,pre+n+1,mid-pre[i])-pre;
ispark[i]=true;
cout << i << " ";
dem++;
}
ford(i,1,n){
if(!ispark[i]){
cout << i << " ";
dem++;
if(dem==k) return;
}
}
}
void sub3(){
while(l<r){
ll mid=(l+r)/2;
if(check(mid)) l=mid;
else r=mid-1;
}
cout << l << "\n";
check1(l);
}
int main(){
ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
cin >> n >> k;
ford(i,1,n-1){
int x,y,w;
cin >> x >> y >> w;
if(x!=i||y!=i+1) checksub3=false;
pre[y]+=pre[x]+w;
r+=w;
a[x].pb({y,w});
a[y].pb({x,w});
}
if(n<=20) sub1();
else if(k==1) sub2();
else if(checksub3) sub3();
return 0;
}
*/
#include <bits/stdc++.h>
#pragma GCC optimize("O3")
#define ford(a,b,c) for(int a = b; a <= c; a++)
#define fti(a,b,c) for(int a = b; a >= c; a--)
#define file(name) freopen(name ".inp", "r", stdin); freopen(name ".out", "w", stdout);
#define siz size()
#define pll pair<long long,long long>
#define pii pair<int,int>
#define ll long long
#define ms(a,b) for(int i=0;i<=a.siz;i++) a[i]=b;
#define all(a) a.begin(),a.end()
#define pb push_back
#define fi first
#define se second
using namespace std;
const int maxn=200005;
int n,k;
vector<pii>a[maxn];
ll rem[maxn],e[maxn],cv[maxn],mid;
vector<int>res;
void dfs(int u,int p){
rem[u]=0;
e[u]=-1;
for(auto x:a[u]){
int v=x.first,w=x.second;
if(v!=p){
dfs(v,u);
if(e[v]!=-1){
if(e[v]>=w) e[u]=max(e[u],e[v]-w);
continue;
}
if(rem[v]+w>mid){
cv[v]=1;
rem[v]=0;
e[v]=mid;
if(mid>=w) e[u]=max(e[u],mid-w);
}
else rem[u]=max(rem[u],rem[v]+w);
}
}
if(e[u]>=rem[u]) rem[u]=0;
else e[u]=-1;
if(u==1&&e[u]==-1) cv[u]=1;
}
bool check(ll x){
mid=x;
memset(cv,0,sizeof(cv));
memset(rem,0,sizeof(rem));
ford(i,1,n) e[i]=-1;
dfs(1,0);
int cnt=0;
ford(i,1,n) cnt+=cv[i];
if(cnt<=k){
res.clear();
ford(i,1,n)
if(cv[i]) res.pb(i);
return 1;
}
return 0;
}
int main(){
ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
cin>>n>>k;
ll tot=0;
ford(i,1,n-1){
int u,v,c;
cin>>u>>v>>c;
a[u].pb({v,c});
a[v].pb({u,c});
tot+=c;
}
ll l=0,r=tot,ans=tot;
while(l<=r){
ll m=(l+r)/2;
if(check(m)){
ans=m;
r=m-1;
}
else l=m+1;
}
check(ans);
cout<<ans<<'\n';
vector<int>mark(n+1,0);
for(auto x:res){
cout<<x<<" ";
mark[x]=1;
}
int need=k-res.size();
ford(i,1,n){
if(need==0) break;
if(!mark[i]){
cout<<i<<" ";
need--;
}
}
return 0;
}