#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 10;
int n, p, cnt;
long long dp[maxn][6], sz[maxn][6], ans = 0;
struct edge {
  int v;
  edge *next;
} e[maxn << 1], *head[maxn];
void dfs(int u, int fa) {
  sz[u][0] = 1;
  for (edge *k = head[u]; k; k = k->next)
    if (k->v != fa) {
      dfs(k->v, u);
      for (int i = p; i >= 1; i--)
        dp[u][i] += dp[k->v][i - 1], sz[u][i] += sz[k->v][i - 1];
      sz[u][0] += sz[k->v][0], dp[u][0] += sz[k->v][0] + dp[k->v][p - 1];
    }
}
void Dp(int u, int fa) {
  ans += dp[u][0];
  for (edge *k = head[u]; k; k = k->next)
    if (k->v != fa) {
      for (int i = 1; i <= p; i++)
        dp[u][i] -= dp[k->v][i - 1], sz[u][i] -= sz[k->v][i - 1];
      sz[u][0] -= sz[k->v][0], dp[u][0] -= sz[k->v][0] + dp[k->v][p - 1];
      for (int i = 1; i <= p; i++)
        dp[k->v][i] += dp[u][i - 1], sz[k->v][i] += sz[u][i - 1];
      sz[k->v][0] += sz[u][0], dp[k->v][0] += sz[u][0] + dp[u][p - 1];
      Dp(k->v, u);
      for (int i = 1; i <= p; i++)
        dp[k->v][i] -= dp[u][i - 1], sz[k->v][i] -= sz[u][i - 1];
      sz[k->v][0] -= sz[u][0], dp[k->v][0] -= sz[u][0] + dp[u][p - 1];
      for (int i = p; i >= 1; i--)
        dp[u][i] += dp[k->v][i - 1], sz[u][i] += sz[k->v][i - 1];
      sz[u][0] += sz[k->v][0], dp[u][0] += sz[k->v][0] + dp[k->v][p - 1];
    }
}
int main() {
  scanf("%d%d", &n, &p);
  int u, v;
  for (int i = 1; i < n; i++)
    scanf("%d%d", &u, &v), (e[cnt] = (edge){v, head[u]}, head[u] = &e[cnt++]),
        (e[cnt] = (edge){u, head[v]}, head[v] = &e[cnt++]);
  dfs(1, 0);
  Dp(1, 0);
  printf("%I64d", ans / 2);
  return 0;
}
