#include <bits/stdc++.h>
using namespace std;
long long r, m, a[500005], n, b[500005], c[500005];
vector<long long> v[500005];
struct rd {
  long long e[5] = {0};
};
vector<rd> remainds[500005];
rd dfs(long long x, long long dis) {
  long long i, j, k;
  a[x] = 1;
  rd temp, fi;
  for (i = 0; i < v[x].size(); i++) {
    if (a[v[x][i]] == 1) continue;
    temp = dfs(v[x][i], dis + 1);
    remainds[x].push_back(temp);
    for (j = 0; j < r; j++) fi.e[(j + 1) % r] += temp.e[j];
  }
  fi.e[1ll % r]++;
  m = m + dis / r + (dis % r != 0);
  return fi;
}
void dfg(long long x, rd pre, long long ans) {
  long long i, j, k, l;
  rd tot;
  b[x] = 1;
  for (i = 0; i < r; i++) tot.e[(i + 1) % r] = pre.e[i];
  ans = ans + tot.e[1];
  rd n1, te, pt;
  for (i = 0; i < remainds[x].size(); i++) {
    for (j = 0; j < r; j++) te.e[j] += remainds[x][i].e[j];
  }
  ans -= te.e[0];
  tot.e[1]++;
  for (j = 0; j < r; j++) tot.e[j] += te.e[j];
  l = 0;
  m = m + ans;
  for (i = 0; i < v[x].size(); i++) {
    if (b[v[x][i]] == 1) continue;
    rd ft;
    for (j = 0; j < r; j++) ft.e[j] = tot.e[j] - remainds[x][l].e[j];
    l++;
    dfg(v[x][i], ft, ans);
  }
}
long long dft(long long x) {
  long long i, j, k = 1;
  c[x] = 1;
  rd temp, fi;
  for (i = 0; i < v[x].size(); i++) {
    if (c[v[x][i]] == 1) continue;
    k += dft(v[x][i]);
  }
  m = m + k * (n - k);
  return k;
}
int main() {
  ios_base::sync_with_stdio(0);
  long long k = 0, t = 0, x, sum = 0, q, y = 0, l = 0, i, j, z, p;
  cin >> n >> r;
  for (i = 0; i < n - 1; i++) {
    cin >> x >> y;
    v[x].push_back(y);
    v[y].push_back(x);
  }
  a[1] = 1;
  rd n1, gurz, temp;
  for (i = 0; i < v[1].size(); i++) {
    n1 = dfs(v[1][i], 1);
    remainds[1].push_back(n1);
    for (j = 0; j < r; j++) gurz.e[j] += n1.e[j];
  }
  x = m;
  b[1] = 1;
  for (i = 0; i < v[1].size(); i++) {
    n1 = remainds[1][i];
    for (j = 0; j < r; j++) temp.e[j] = gurz.e[j] - n1.e[j];
    dfg(v[1][i], temp, x);
  }
  if (r > 1)
    cout << m / 2;
  else {
    m = 0;
    c[1] = 1;
    dft(1);
    cout << m;
  }
  return 0;
}
