#include<iostream>
#include<cstdio>
#include<cstring>
#define re register int
#define il inline
using namespace std;
typedef long long ll;
const int N=3e5+10;
struct Node{
ll v;
int cnt;
}dp[N][3];
int n,tot,head[N],k,x,y,sz[N];
ll z,an;
struct node{
int to,next;
ll w;
}e[N<<1];
il void Add(int a,int b,ll c){
tot++;
e[tot].to=b;
e[tot].next=head[a];
e[tot].w=c;
head[a]=tot;
}
Node operator + (Node a,Node b){
Node c;
c.v=a.v+b.v;
c.cnt=a.cnt+b.cnt;
return c;
}
bool operator > (Node a,Node b){
if(a.v>b.v)return 1;
if(a.v<b.v)return 0;
return a.cnt<b.cnt;
}
il ll mx(ll A,ll B){return A>B?A:B;}
il void dfs(int now,int fa,ll ss){
dp[now][0].v=dp[now][0].cnt=dp[now][1].cnt=dp[now][1].v=0;
dp[now][2].v=-ss;
dp[now][2].cnt=1;
for(int i=head[now];i;i=e[i].next){
int To=e[i].to;
if(To!=fa){
dfs(To,now,ss);
Node cc;
cc.v=dp[To][1].v+e[i].w-ss;
cc.cnt=dp[To][1].cnt+1;
if((dp[now][2]+dp[To][0])>dp[now][2])dp[now][2]=dp[now][2]+dp[To][0];
if((dp[now][1]+cc)>dp[now][2])dp[now][2]=dp[now][1]+cc;
if(dp[To][0]+dp[now][1]>dp[now][1])dp[now][1]=dp[To][0]+dp[now][1];
cc.v+=ss;
cc.cnt--;
if((cc+dp[now][0])>dp[now][1])
dp[now][1]=dp[now][0]+cc;
if(dp[To][0]+dp[now][0]>dp[now][0])
dp[now][0]=dp[To][0]+dp[now][0];
}
}
Node cc;
cc.v=dp[now][1].v-ss;
cc.cnt=dp[now][1].cnt+1;
if(cc>dp[now][0])
dp[now][0]=cc;
if(dp[now][2]>dp[now][0])
dp[now][0]=dp[now][2];
}
il bool chck(ll k){
memset(dp,0,sizeof(dp));
memset(sz,0,sizeof(sz));
dfs(1,0,k);
// cout<<dp[1][0].v<<" "<<dp[1][0].cnt<<"dsflgj"<<k<<endl;
return dp[1][0].cnt>=k;
}
int main(){
scanf("%d%d",&n,&k);
k++;
for(re i=1;i<n;i++){
scanf("%d%d%lld",&x,&y,&z);
Add(x,y,z);
Add(y,x,z);
}
ll l=-100000000ll,r=100000000ll;
while(l<=r){
ll mid=(l+r)>>1;
if(chck(mid)){
an=mx(an,dp[1][0].v+k*mid);
l=mid+1;
}
else r=mid-1;
}
printf("%lld",an);
return 0;
}
恳请路过的佬好心帮忙看看蒟蒻快调死了