#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N=2000;
int n;
ll m;
struct Edge{
int v,w;
int next;
}e[N<<1+5];
int head[N+5],cnt;
void add(int u,int v,int w){
e[++cnt].v=v;
e[cnt].w=w;
e[cnt].next=head[u];
head[u]=cnt;
return ;
}
ll u,v,w;
bool vis[N+5];
ll dp[N+5][N+5];
ll sz[N+5];
void dfs(int x){
for(int i=head[x];i;i=e[i].next){
int v=e[i].v;
int w=e[i].w;
if(!vis[v]){
vis[v]=1;
dfs(v);
for(int j=max(m,sz[x]);j>=0;j--)
for(int k=max(j-sz[x]+sz[v],(ll)0);k<=min((ll)j,sz[v]);k++){
ll tot=(k*(m-k)+(sz[v]-k)*(n-m-sz[v]+k));
dp[x][j]=max(dp[x][j],dp[x][j-k]+dp[v][k]+tot*w);
}
}
}
return ;
}
void calsize(int x){
for(int i=head[x];i;i=e[i].next){
int v=e[i].v;
int w=e[i].w;
if(!vis[v]){
vis[v]=1;
calsize(v);
sz[x]+=sz[v];
}
}
return ;
}
int main(){
if (n-m<m) m=n-m;
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>n>>m;
for(int i=1;i<n;i++){
cin>>u>>v>>w;
add(u,v,w);
add(v,u,w);
}
vis[1]=1;
for(int i=1;i<=n;i++)
sz[i]=1;
calsize(1);
memset(vis,0,sizeof(vis));
vis[1]=1;
dfs(1);
cout<<dp[1][m];
return 0;
}