#include<bits/stdc++.h>
using namespace std;
long long n,q,head[10000],cnt,g[105][105][105],b[105][105][105],ans;
struct node{
long long to,next,v;
};
node edge[10000];
void addedge(int x,int y,int z)
{
cnt++;
edge[cnt].to=y;
edge[cnt].v=z;
edge[cnt].next=head[x];
head[x]=cnt;
}
long long dfs(int k,int fa,int l)
{
if(b[k][fa][l]==1)
return g[k][fa][l];
b[k][fa][l]=1;
if(l>q)
{
g[k][fa][l]=-2e9;// 若添加该边超过边总数,就使答案为负无穷
return -2e9;
}
int p[4]={0},c=0;
for(int i=head[k];i!=0;i=edge[i].next)
if(edge[i].to!=fa)
p[++c]=i;
if(c==0)//对于结点k其要么无子结点 要么子节点为2
{
g[k][fa][l]=0;
return 0;
}
else
if(c==2)//子节点为2,第一种情况2边都选,第二种去左子树,第三种去右子树
g[k][fa][l]= max(max(edge[p[1]].v+edge[p[2]].v+dfs(edge[p[1]].to,k,l+2)+dfs(edge[p[2]].to,k,l+2),
edge[p[1]].v+dfs(edge[p[1]].to,k,l+1)),
edge[p[2]].v+dfs(edge[p[2]].to,k,l+1));
return g[k][fa][l];
}
int main()
{
cin>>n>>q;
for(int i=1;i<=n-1;++i)
{
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
addedge(x,y,z);
addedge(y,x,z);
}
ans=max(ans,dfs(1,0,0)) ;
cout<<ans;
}