#include <bits/stdc++.h>
#include <unordered_map>
#include <unordered_set>
using namespace std;
#define int long long
#define pc putchar
int in(){
char a=getchar();int k=0,kk=1;
while(!(a>='0'&&a<='9')) {if(a == '-') kk = -1;a = getchar();}
while(a>='0'&&a<='9') k = k*10 + a - '0', a = getchar();
return k*kk;
}
void out(int a){
if(a < 0) pc('-'), a= -a;
if(a > 9) out(a/10);
pc('0'+a%10);
}
#define fst first
#define snd second
#define _rep(i,a,b) for(int i=(a);i<=(b);++i)
#define _rrep(i,a,b) for(int i=(a);i>=(b);--i)
#define _reps(i,a,b,c) for(int i=(a);i<=(b);c)
#define _rreps(i,a,b,c) for(int i=(a);i>=(b);c)
#define _graph(i) for(int i=head[u];i;i=e[i].nxt)
#define mp make_pair
#define pint pair<int,int>
#define i128 __int128
#define i64 long long
#define pb emplace_back
#define FRR(file) freopen(file,"r",stdin)
#define FRW(file) freopen(file,"w",stdout)
#define nowtime (double)clock()/CLOCKS_PER_SEC
const int N = 105, inf = 1e18;
int n,Q,head[N],tot,f[N][N];
struct node{
int nxt,v,w;
}e[N*2];
void add(int u,int v,int w){
e[++tot].v=v,e[tot].nxt=head[u],head[u]=tot,e[tot].w=w;
}
void dfs(int u,int fa){
_graph(i){
int v = e[i].v;
if(v != fa){
dfs(v,u);
f[u][1] = max(f[u][1],e[i].w);
}
}
_graph(i){
int v = e[i].v;
if(v == fa) continue;
for(int j=1;j<=Q-1;++j){
for(int w=Q;w>j;--w){
f[u][w] = max(f[u][w],f[u][w-j-1]+f[v][j]+e[i].w);
}
}
}
}
signed main(){
n = in(), Q = in();
_rep(i,1,n-1){
int u=in(),v=in(),w=in();
add(u,v,w), add(v,u,w);
}
for(int i=1;i<=n;i++){
for(int j=1;j<=Q;++j){
f[i][j] = -inf;
}
}
dfs(1,0);
out(f[1][Q]);
return 0;
}