/* hdu6060[贪心+dfs] 2017多校3*/
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
int n, k, u, v, c;
struct Edge {
LL cost;
int to;
Edge(int C = 0, int T = 0): cost(C), to(T) {}
};
vector<Edge> G[1000005];
int son[1000005];
LL ans = 0;
void dfs(int u, int fa) {
son[u]++;
for (int i = 0; i < (int)G[u].size(); i++) {
Edge e = G[u][i];
if (e.to == fa) continue;
dfs(e.to, u);
son[u] += son[e.to];
ans += min(son[e.to], k) * e.cost;
}
}
void init() {
ans = 0;
for (int i = 1; i <= n; i++) {
G[i].clear();
}
memset(son, 0, sizeof(son));
}
void solve() {
dfs(1, -1);
printf("%lld\n", ans);
}
int main() {
while (~scanf("%d%d", &n, &k)) {
init();
for (int i = 0; i < n - 1; i++) {
scanf("%d%d%lld", &u, &v, &c);
G[u].push_back(Edge(c, v));
G[v].push_back(Edge(c, u));
}
solve();
}
return 0;
}