#include<bits/stdc++.h>
using namespace std;
struct Node{
int nex,val,to;
}edge[201];
int heads[101],num;
inline void add(int u,int v,int w)
{
++num;
edge[num].to=v;
edge[num].val=w;
edge[num].nex=heads[u];
heads[u]=num;
}
int n,q,ls[101],rs[101],lval[101],rval[101],dp[101][101],son[101];
void dfs1(int node,int fa)
{
son[node]=1;
for(int i=heads[node];i;i=edge[i].nex)
{
if(edge[i].to==fa)continue;
dfs1(edge[i].to,node);
son[node]+=son[edge[i].to];
}
}
void findout(int node,int fa)
{
int ls=-1,rs=-1,lval=0,rval=0;
for(int i=heads[node];i;i=edge[i].nex)
{
if(edge[i].to==fa)continue;
if(ls==-1)ls=edge[i].to,lval=edge[i].val;
else rs=edge[i].to,rval=edge[i].val;
}
if(ls==-1)return ;
findout(ls,node);
findout(rs,node);
for(int i=min(son[node],q);i>0;--i)
{
for(int j=min(son[node],q)-1+(node==1);j>=0;--j)
{
int ans=0,numl=j,numr=i-j;
if(numl>=1)ans+=lval;
if(numr>=1)ans+=rval;
if(numl-1>0)ans+=dp[ls][numl-1];
if(numr-1>0)ans+=dp[rs][numr-1];
dp[node][i]=max(dp[node][i],ans);
}
}
}
signed main()
{
int x,y,z;
scanf("%d%d",&n,&q);
for(int i=1;i<n;++i)
{
scanf("%d%d%d",&x,&y,&z);
add(x,y,z);
add(y,x,z);
}
dfs1(1,0);
findout(1,0);
cout<<dp[1][q];
return 0;
}