%ydc 丢题解走人OAO %%%ydc
#include"bits/stdc++.h"
using namespace std;
typedef long long ll;
const int N=2005;
struct E{
int to,cost;
E(int _=0,int __=0)
{ to=_; cost=__;}
} ;
int n,k,size[N],fa[N];
vector<E> e[N];
ll f[N][N],tmp[N];
void init(){
int i,u,v,c;
scanf("%d%d",&n,&k);
for(i=1;i<n;i++){
scanf("%d%d%d",&u,&v,&c);
e[u].push_back(E(v,c));
e[v].push_back(E(u,c));
}
}
void treedp(int x){
size[x]=1;
int s,i,j,to,c;
for(s=0;s<e[x].size();s++){
to=e[x][s].to;
c=e[x][s].cost;
if(to!=fa[x]){
fa[to]=x;treedp(to);
for(i=0;i<=size[x]+size[to];i++)
tmp[i]=0;
for(i=0;i<=size[x];i++)
for(j=0;j<=size[to];j++)
tmp[i+j]=max(tmp[i+j],f[x][i]+f[to][j]+
c*((ll)j*(k-j)+(ll)(size[to]-j)*(n+j-k-size[to])));
size[x]+=size[to];
for(i=0;i<=size[x];i++)
f[x][i]=tmp[i];
}
}
}
int main(){
init(); treedp(1);
printf("%lld\n",f[1][k]);
return 0;
}