#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
int n, k;
const int MAXN = 2e5 + 10;
struct node {
  int v, next;
} e[MAXN << 1];
int tot;
int head[MAXN];
void addedge(int u, int v) {
  e[tot].v = v;
  e[tot].next = head[u];
  head[u] = tot++;
}
void init() {
  tot = 0;
  memset(head, -1, sizeof head);
}
long long num[MAXN];
long long sum[MAXN];
long long ans[MAXN];
long long dp[MAXN][5];
void dfs(int u, int fa) {
  for (int i = head[u]; i != -1; i = e[i].next) {
    int v = e[i].v;
    if (v == fa) continue;
    dfs(v, u);
    ans[u] += ans[v];
    ans[u] += num[v] * sum[u] + num[u] * sum[v];
    for (int i = 0; i < k; ++i) {
      for (int j = 0; j < k; ++j) {
        int ti = i == 0 ? k : i;
        int tj = j + 1;
        int b = ti + tj;
        int jump = b / k;
        if (b % k) ++jump;
        ans[u] += dp[u][i] * dp[v][j] * jump;
      }
    }
    sum[u] += sum[v];
    num[u] += num[v];
    for (int j = 0; j < k; ++j) {
      dp[u][(j + 1) % k] += dp[v][j];
    }
  }
  sum[u] += dp[u][0];
  ans[u] += sum[u] + num[u] - dp[u][0];
  dp[u][0] += 1;
  num[u]++;
}
int main() {
  while (cin >> n >> k) {
    init();
    for (int i = 1; i < n; ++i) {
      int a, b;
      cin >> a >> b;
      addedge(a, b);
      addedge(b, a);
    }
    memset(dp, 0, sizeof dp);
    memset(sum, 0, sizeof sum);
    memset(ans, 0, sizeof ans);
    memset(num, 0, sizeof num);
    dfs(1, 1);
    cout << ans[1] << endl;
  }
  return 0;
}
