#include <bits/stdc++.h>
using namespace std;
const int MXN = 200100;
vector<int> ed[MXN];
int was[MXN];
int k;
long long value(const vector<int>& dcnt) { return dcnt[0]; }
vector<int> calc_new(vector<int> a) {
  rotate(a.begin(), a.begin() + a.size() - 1, a.end());
  return a;
}
vector<int> add_vec(const vector<int>& a, const vector<int>& b) {
  int n = a.size();
  vector<int> res(n);
  for (int i = (0); i < (n); i++) {
    res[i] = a[i] + b[i];
  }
  return res;
}
long long res = 0;
pair<vector<int>, long long> dfs(int v, int p, long long sum,
                                 vector<int> dcnt) {
  if (k > 1) {
    dcnt[1]++;
  } else {
    dcnt[0]++;
  }
  sum++;
  res += sum;
  int sz = ed[v].size();
  vector<int> diff(k);
  long long val_diff = 0;
  for (int i = (0); i < (sz); i++) {
    int to = ed[v][i];
    if (to == p) {
      continue;
    }
    pair<vector<int>, long long> dd =
        dfs(to, v, val_diff + sum + value(dcnt) + value(diff),
            add_vec(calc_new(dcnt), calc_new(diff)));
    val_diff += value(dd.first);
    val_diff += dd.second;
    dd.first = calc_new(dd.first);
    diff = add_vec(diff, dd.first);
  }
  diff[0]++;
  return {diff, val_diff};
}
int main() {
  int n;
  scanf("%d%d", &n, &k);
  for (int i = (0); i < (n - 1); i++) {
    int a, b;
    scanf("%d%d", &a, &b);
    a--, b--;
    ed[a].push_back(b);
    ed[b].push_back(a);
  }
  vector<int> cnt(k);
  if (k > 1) {
    cnt[1] = -1;
  } else {
    cnt[0] = -1;
  }
  dfs(0, -1, -1, cnt);
  cout << res << endl;
}
