#include<bits/stdc++.h>
#define maxn 2005
using namespace std;
int n,k;
struct Edge{
int v,next,w;
}edge[maxn<<1];
int head[maxn],size[maxn],cnt,vis[maxn];
long long f[maxn][maxn];
void add(int u,int v,int w){
edge[++cnt].v=v;
edge[cnt].next=head[u];
edge[cnt].w=w;
head[u]=cnt;
}
void tree_dp(int p){
size[p]=1;
vis[p]=1;
f[p][0]=f[p][1]=0;
for(int i=head[p];i!=-1;i=edge[i].next){
int v=edge[i].v;
if(vis[v]) continue;
tree_dp(v);
size[p]+=size[v];
for(int j=min(k,size[p]);j>=0;j--){
for(int l=0;l<=min(j,size[v]);l++){
if(f[p][j-l]==-1) continue;
f[p][j]=max(f[p][j],f[v][l]+f[p][j-l]+1ll*edge[i].w*(1ll*l*(k-l)+1ll*(size[v]-l)*(n-k-size[v]+l)));
}
}
}
}
signed main(){
memset(f,-1,sizeof f);
memset(head,-1,sizeof head);
cin>>n>>k;
int u,v,d;
for(int i=1;i<n;i++){
scanf("%d%d%d",&u,&v,&d);
add(u,v,d);
add(v,u,d);
}
tree_dp(1);
cout<<f[1][k];
return 0;
}