#include <bits/stdc++.h>
using namespace std;
const int N = 100005, inf = 0x3f3f3f3f;
int n, K, cnte;
int head[N], f[N][2];
struct edge {
  int v, w, nxt;
} e[N * 2];
void ade(int u, int v, int w) {
  e[++cnte] = (edge){v, w, head[u]};
  head[u] = cnte;
}
struct val {
  int v0, v1;
} a[N];
bool cmp1(val x, val y) { return x.v1 != y.v1 ? x.v1 > y.v1 : x.v0 > y.v0; }
void dfs1(int u, int fa) {
  for (int i = head[u]; i; i = e[i].nxt)
    if (e[i].v != fa) dfs1(e[i].v, u);
  int deg = 0, mx = 0, mi = inf;
  for (int i = head[u]; i; i = e[i].nxt) {
    int v = e[i].v;
    if (v != fa) a[++deg] = (val){e[i].w + f[v][0], e[i].w + f[v][1]};
  }
  sort(a + 1, a + deg + 1, cmp1);
  for (int i = 1; i <= min(deg, K - 1); i++)
    f[u][1] += a[i].v1, f[u][0] += a[i].v1, mx = max(mx, a[i].v0 - a[i].v1),
                                            mi = min(mi, a[i].v1);
  if (deg >= K)
    f[u][0] += a[K].v1, mx = max(mx, a[K].v0 - a[K].v1), mi = min(mi, a[K].v1);
  for (int i = K + 1; i <= deg; i++) mx = max(mx, a[i].v0 - mi);
  if (deg && K) f[u][0] += mx;
}
int main() {
  int x, y, z;
  scanf("%d%d", &n, &K);
  for (int i = 1; i < n; i++) {
    scanf("%d%d%d", &x, &y, &z);
    ade(x, y, z);
    ade(y, x, z);
  }
  dfs1(0, 0);
  printf("%d", f[0][0]);
  return 0;
}
