#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,k,u,v,w,dp[2010][2010],siz[2010];
struct edge{int from,to,val;};
vector<edge>p[2010];
void dfdp(int x,int fa){
siz[x]=1;
for(int i=0;i<p[x].size();++i){
int y=p[x][i].to;
if(y==fa)continue;
dfdp(y,x),siz[x]+=siz[y];
for(int j=min(siz[x],k);j>=0;--j){
int t=siz[y]*(n-k-siz[y]);
dp[x][j]=max(dp[x][j],dp[y][0]+dp[x][j]+t*p[x][i].val);
for(int l=min(siz[y],j);l>0;--l){
t=l*(k-l)+(siz[y]-l)*(n-k-siz[y]+l);
dp[x][j]=max(dp[x][j],dp[y][l]+dp[x][j-l]+t*p[x][i].val);
}
}
}
}
signed main(){
cin>>n>>k;
for(int i=1;i<n;i++){
cin>>u>>v>>w;
p[u].push_back({u,v,w});
p[v].push_back({v,u,w});
}
dfdp(1,0);
cout<<dp[1][k];
return 0;
}