#include <bits/stdc++.h>
using namespace std;
vector < vector < pair<int,int> > > G;
int n,q,dp[105][105];
void dfs(int pos, int par)
{
//pos is where i am currently
//par is my parent
int dp_v[n+2][n+2];
memset(dp_v, -1, sizeof dp_v); //-1 means not computed
//best we can do after considering 0 children and 0 edges is 0
dp_v[0][0]=0;
int child_num=1;
for (int i = 0; i < G[pos].size(); ++i)
{
int child=G[pos][i].first;
int weight_of=G[pos][i].second;
//since we added edges in both directions we
//must ensure that we are travelling down the tree
//and not up the tree. if child is not equal to par then
//we are going down
if(child != par)
{
//parent of child is where i am i.e. pos
dfs(child,pos);
//now that I have processed this child
//i can compute dp_v(child_num,j)
for (int j = 0; j < n; ++j)
{
if(dp_v[child_num-1][j] != -1)
dp_v[child_num][j] = dp_v[child_num-1][j];
for (int k = 0; k < j; ++k)
{
if(dp_v[child_num-1][j-(k+1)] != -1)
dp_v[child_num][j]=max(dp_v[child_num][j],dp_v[child_num-1][j-(k+1)] + weight_of + dp[child][k]);
}
}
//update child_num
child_num++;
}
}
for (int i = 0; i < n; ++i)
{
dp[pos][i]=dp_v[child_num-1][i];
}
}
int main()
{
ios_base::sync_with_stdio(0);
cin>>n>>q;
G.resize(n+1);
int u,v,w;
for (int i = 0; i < n-1; ++i)
{
cin>>u>>v>>w;
G[u].push_back(make_pair(v,w));
G[v].push_back(make_pair(u,w));
}
//compute dp inside dfs
dfs(1,0);
//final answer is the best subtree rooted at 1 with q edges
cout<<dp[1][q]<<"\n";
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnZlY3RvciA8IHZlY3RvciA8IHBhaXI8aW50LGludD4gPiA+IEc7CmludCBuLHEsZHBbMTA1XVsxMDVdOwp2b2lkIGRmcyhpbnQgcG9zLCBpbnQgcGFyKQp7CgkvL3BvcyBpcyB3aGVyZSBpIGFtIGN1cnJlbnRseQoJLy9wYXIgaXMgbXkgcGFyZW50CglpbnQgZHBfdltuKzJdW24rMl07CgltZW1zZXQoZHBfdiwgLTEsIHNpemVvZiBkcF92KTsgLy8tMSBtZWFucyBub3QgY29tcHV0ZWQKCQoJLy9iZXN0IHdlIGNhbiBkbyBhZnRlciBjb25zaWRlcmluZyAwIGNoaWxkcmVuIGFuZCAwIGVkZ2VzIGlzIDAKCWRwX3ZbMF1bMF09MDsKCglpbnQgY2hpbGRfbnVtPTE7Cglmb3IgKGludCBpID0gMDsgaSA8IEdbcG9zXS5zaXplKCk7ICsraSkKCXsKCQlpbnQgY2hpbGQ9R1twb3NdW2ldLmZpcnN0OwoJCWludCB3ZWlnaHRfb2Y9R1twb3NdW2ldLnNlY29uZDsKCQkvL3NpbmNlIHdlIGFkZGVkIGVkZ2VzIGluIGJvdGggZGlyZWN0aW9ucyB3ZQoJCS8vbXVzdCBlbnN1cmUgdGhhdCB3ZSBhcmUgdHJhdmVsbGluZyBkb3duIHRoZSB0cmVlCgkJLy9hbmQgbm90IHVwIHRoZSB0cmVlLiBpZiBjaGlsZCBpcyBub3QgZXF1YWwgdG8gcGFyIHRoZW4KCQkvL3dlIGFyZSBnb2luZyBkb3duCgkJaWYoY2hpbGQgIT0gcGFyKQoJCXsKCQkJLy9wYXJlbnQgb2YgY2hpbGQgaXMgd2hlcmUgaSBhbSBpLmUuIHBvcwoJCQlkZnMoY2hpbGQscG9zKTsKCQkJLy9ub3cgdGhhdCBJIGhhdmUgcHJvY2Vzc2VkIHRoaXMgY2hpbGQKCQkJLy9pIGNhbiBjb21wdXRlIGRwX3YoY2hpbGRfbnVtLGopCgkJCWZvciAoaW50IGogPSAwOyBqIDwgbjsgKytqKQoJCQl7CgkJCQlpZihkcF92W2NoaWxkX251bS0xXVtqXSAhPSAtMSkKCQkJCQlkcF92W2NoaWxkX251bV1bal0gPSBkcF92W2NoaWxkX251bS0xXVtqXTsKCQkJCWZvciAoaW50IGsgPSAwOyBrIDwgajsgKytrKQoJCQkJewoJCQkJCWlmKGRwX3ZbY2hpbGRfbnVtLTFdW2otKGsrMSldICE9IC0xKQoJCQkJCQlkcF92W2NoaWxkX251bV1bal09bWF4KGRwX3ZbY2hpbGRfbnVtXVtqXSxkcF92W2NoaWxkX251bS0xXVtqLShrKzEpXSArIHdlaWdodF9vZiArIGRwW2NoaWxkXVtrXSk7CgkJCQl9CgkJCX0KCQkJLy91cGRhdGUgY2hpbGRfbnVtCgkJCWNoaWxkX251bSsrOwoJCX0KCX0KCWZvciAoaW50IGkgPSAwOyBpIDwgbjsgKytpKQoJewoJCWRwW3Bvc11baV09ZHBfdltjaGlsZF9udW0tMV1baV07Cgl9Cn0KaW50IG1haW4oKQp7Cglpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOwoJY2luPj5uPj5xOwoJRy5yZXNpemUobisxKTsKCWludCB1LHYsdzsKCWZvciAoaW50IGkgPSAwOyBpIDwgbi0xOyArK2kpCgl7CgkJY2luPj51Pj52Pj53OwoJCUdbdV0ucHVzaF9iYWNrKG1ha2VfcGFpcih2LHcpKTsKCQlHW3ZdLnB1c2hfYmFjayhtYWtlX3BhaXIodSx3KSk7Cgl9CgkvL2NvbXB1dGUgZHAgaW5zaWRlIGRmcwoJZGZzKDEsMCk7CgkvL2ZpbmFsIGFuc3dlciBpcyB0aGUgYmVzdCBzdWJ0cmVlIHJvb3RlZCBhdCAxIHdpdGggcSBlZGdlcwoJY291dDw8ZHBbMV1bcV08PCJcbiI7CglyZXR1cm4gMDsKfQ==