#include <bits/stdc++.h>
using namespace std;
inline int read() {
  int x = 0, f = 1;
  char ch = getchar();
  while (!(ch >= '0' && ch <= '9')) {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    x = x * 10 + (ch - '0');
    ch = getchar();
  }
  return x * f;
}
const int N = 200005;
struct edge {
  int go, next;
} e[N << 1];
int cnt = 0, last[N];
inline void ins(int u, int v) {
  e[++cnt].go = v;
  e[cnt].next = last[u];
  last[u] = cnt;
}
int n, k;
long long dp[N][6];
int num[N][6];
long long ans = 0;
inline void dfs(int x, int fa) {
  dp[x][0] = 0;
  num[x][0] = 1;
  for (int i = last[x]; i; i = e[i].next) {
    if (e[i].go == fa) continue;
    dfs(e[i].go, x);
    for (int p = 0; p <= k - 1; p++) {
      for (int q = 0; q <= k - 1; q++) {
        ans += num[e[i].go][p] * dp[x][q] + num[x][q] * dp[e[i].go][p];
        if (p + q + 1 > k) ans += 1LL * num[e[i].go][p] * num[x][q];
        ans += 1LL * num[e[i].go][p] * num[x][q];
      }
    }
    for (int p = 0; p <= k - 1; p++) {
      dp[x][(p + 1) % k] += dp[e[i].go][p] + (p + 1 == k) * num[e[i].go][p];
      num[x][(p + 1) % k] += num[e[i].go][p];
    }
  }
}
int main() {
  n = read(), k = read();
  for (int i = 1; i <= n - 1; i++) {
    int u = read(), v = read();
    ins(u, v);
    ins(v, u);
  }
  dfs(1, 0);
  printf("%I64d\n", ans);
  return 0;
}
