#include <bits/stdc++.h>
using namespace std;
const long long MAXN = 2e5 + 5;
struct P {
  long long n, s;
  P() {}
  P(long long n, long long s) : n(n), s(s) {}
};
long long n, k;
vector<long long> g[MAXN];
long long ans;
vector<P> dfs(long long u, long long p) {
  vector<P> res(k, P(0, 0));
  for (long long v : g[u]) {
    if (v == p) continue;
    vector<P> vec1 = dfs(v, u);
    vector<P> vec2(k);
    vec2[1 % k] = P(vec1[0].n, vec1[0].s + vec1[0].n);
    for (long long i = 1; i < k; i++)
      vec2[(i + 1) % k] = P(vec1[i].n, vec1[i].s);
    for (long long i = 0; i < k; i++)
      for (long long j = 0; j < k; j++)
        ans += res[i].s * vec2[j].n + res[i].n * vec2[j].s -
               res[i].n * vec2[j].n * ((i != 0) && (j != 0) && (i + j <= k));
    for (long long i = 0; i < k; i++)
      res[i] = P(res[i].n + vec2[i].n, res[i].s + vec2[i].s);
  }
  for (long long i = 0; i < k; i++) ans += res[i].s;
  res[0] = P(res[0].n + 1, res[0].s);
  return res;
}
int main() {
  ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  cin >> n >> k;
  for (long long i = 0; i < n - 1; i++) {
    static long long u, v;
    cin >> u >> v;
    u--, v--;
    g[u].push_back(v);
    g[v].push_back(u);
  }
  dfs(0, -1);
  cout << ans;
  return 0;
}
