#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstdlib>
#include<queue>
using namespace std;
const int N=500010;
int n,m,cnt,head[N],vis[N];
int ans=1,f1=1,f2=1;
priority_queue<int> q;
struct edge{
int val,next,to;
}e[N<<1];
void add(int u,int v,int w){
e[++cnt].next=head[u];
head[u]=cnt;
e[cnt].to=v;
e[cnt].val=w;
}
int z(int x){
return (x+1)/2;
}
void init(){
scanf("%d%d",&n,&m);
for(int i=1;i<n;i++){
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
add(u,v,w);
add(v,u,w);
if(u!=1) f1=0;
if(v!=u+1) f2=0;
q.push(w);
}
}
void dfs1(int cur,int len){
for(int i=head[cur];i;i=e[i].next){
if(!vis[(i+1)/2]){
vis[(i+1)/2]=1;
dfs1(e[i].to,len+e[i].val);
vis[(i+1)/2]=0;
}
}
ans=max(ans,len);
}
void dfs2(int cur,int len,int step){
if(cur==n&&step==m){
ans=max(ans,len);
return;
}
if(cur==n||step==m) return;
int l=0;
for(int i=head[cur];i;i=e[i].next){
l+=e[i].val;
dfs2(e[i].to,min(len,l),step+1);
dfs2(e[i].to,l,step);
}
}
int main(){
init();
if(m==1){
for(int i=1;i<=n;i++) dfs1(i,0);
}else if(f1){
ans=0;
for(int i=1;i<=m;i++){
if(q.empty()) break;
ans+=q.top();
q.pop();
if(q.empty()) break;
ans+=q.top();
q.pop();
}
}else if(m==n-1){
int tmp;
while(!q.empty()){
tmp=q.top();
q.pop();
}
ans=tmp;
}else if(f2){
dfs2(1,0,1);
}
printf("%d",ans);
return 0;
}