#include <iostream>
#include <utility>
#include <vector>
int N, Q, DP[105][105];
std::vector<std::pair<int, int> > Tree[105];
int EdgeNum[105];
void DFS(int Node, int Prev) {
for (auto Edge: Tree[Node]) {
int Node2 = Edge.first, Weight = Edge.second;
if (Node2 == Prev) continue;
DFS(Node2, Node);
EdgeNum[Node] = EdgeNum[Node2] + 1;
for (int This = std::min(EdgeNum[Node], Q); This != 0; This--) {
for (int Previous = 0; Previous <= EdgeNum[Node2]; Previous++) {
DP[Node][This] = std::max(DP[Node][This], DP[Node][This - Previous - 1] + DP[Node2][Previous] + Weight);
}
}
}
}
int main() {
std::cin >> N >> Q;
for (int EdgeId = 0; EdgeId < N - 1; EdgeId++) {
int Node1, Node2, AppleNum;
std::cin >> Node1 >> Node2 >> AppleNum;
Tree[Node1].emplace_back(Node2, AppleNum);
Tree[Node2].emplace_back(Node1, AppleNum);
}
DFS(1, -1);
std::cout << DP[1][Q] << '\n';
return 0;
}