#include <stdio.h>
#include <algorithm>
using namespace std;
struct edge{
int to,next;
int val;
}e[105];
int ecnt,head[105];
void addedge(int from,int to,int val){
e[++ecnt]=(edge){to,head[from],val};
head[from]=ecnt;
}
int n,q;
int dp[105][105];
int siz[105];
void dfs(int x,int father){
for(int i=head[x];i;i=e[i].next){
int to=e[i].to;
if(to==father)continue;
dfs(to,x);
siz[x]+=siz[to]+1;
}
for(int i=head[x];i;i=e[i].next){
int to=e[i].to;
if(to==father)continue;
for(int j=siz[x];j;j--){
for(int k=min(siz[to],j-1);k;k--){
dp[x][j]=max(dp[x][j],dp[x][j-1-k]+dp[to][k]+e[i].val);
}
}
}
}
int main(){
scanf("%d %d",&n,&q);
while(--n){
int from,to,val;
scanf("%d %d %d",&from,&to,&val);
addedge(from,to,val);
addedge(to,from,val);
}
dfs(1,-1);
printf("%d",dp[1][q]);
return 0;
}