#include <bits/stdc++.h>
using namespace std;
const int maxn = 234567, maxk = 5;
int n, k;
long long subtreeSize[maxn], totalDis[maxn];
vector<long long> e[maxn], numSubtreeLenModK[maxn], numLenModK[maxn];
void getSize(int id, int p) {
  subtreeSize[id] = 1;
  for (int i = 0; i < e[id].size(); i++)
    if (e[id][i] != p) {
      getSize(e[id][i], id);
      subtreeSize[id] += subtreeSize[e[id][i]];
    }
}
void getDisToRoot(int id, int p, int d) {
  totalDis[1] += d;
  for (int i = 0; i < e[id].size(); i++)
    if (e[id][i] != p) getDisToRoot(e[id][i], id, d + 1);
}
void getTotalDis(int id, int p) {
  for (int i = 0; i < e[id].size(); i++)
    if (e[id][i] != p) {
      totalDis[e[id][i]] = totalDis[id] - subtreeSize[e[id][i]] * 2 + n;
      getTotalDis(e[id][i], id);
    }
}
void getNumSubtreeLenModK(int id, int p) {
  numSubtreeLenModK[id] = vector<long long>(k, 0);
  numSubtreeLenModK[id][0] = 1;
  for (int i = 0; i < e[id].size(); i++)
    if (e[id][i] != p) {
      getNumSubtreeLenModK(e[id][i], id);
      for (int j = 0; j < k; j++)
        numSubtreeLenModK[id][j] +=
            numSubtreeLenModK[e[id][i]][(j + k - 1) % k];
    }
}
void getNumLenModK(int id, int p, int d) {
  numLenModK[1][d % k]++;
  for (int i = 0; i < e[id].size(); i++)
    if (e[id][i] != p) getNumLenModK(e[id][i], id, d + 1);
}
void getTotalNumLenModK(int id, int p) {
  for (int i = 0; i < e[id].size(); i++)
    if (e[id][i] != p) {
      numLenModK[e[id][i]] = vector<long long>(k, 0);
      auto tmp = numLenModK[id];
      for (int j = 0; j < k; j++)
        tmp[j] -= numSubtreeLenModK[e[id][i]][(j + k - 1) % k];
      for (int j = 0; j < k; j++)
        numLenModK[e[id][i]][j] += tmp[(j + k - 1) % k];
      for (int j = 0; j < k; j++)
        numLenModK[e[id][i]][j] += numSubtreeLenModK[e[id][i]][j];
      getTotalNumLenModK(e[id][i], id);
    }
}
int main() {
  cin >> n >> k;
  for (int i = 1; i < n; i++) {
    int a, b;
    cin >> a >> b;
    e[a].push_back(b);
    e[b].push_back(a);
  }
  getSize(1, 1);
  getDisToRoot(1, 1, 0);
  getTotalDis(1, 1);
  getNumSubtreeLenModK(1, 1);
  numLenModK[1] = vector<long long>(k, 0);
  getNumLenModK(1, 1, 0);
  getTotalNumLenModK(1, 1);
  long long ans = 0;
  for (int i = 1; i <= n; i++) {
    long long tmp = totalDis[i];
    for (int j = 1; j < k; j++) tmp += numLenModK[i][j] * (k - j);
    ans += tmp / k;
  }
  cout << ans / 2 << endl;
  return 0;
}
