#include <bits/stdc++.h>
using namespace std;
vector<int> adia[200010];
vector<int> suma[200010];
long long pasi[200010];
long long ans;
int n, k;
void dfs1(int nod, int tata);
void dfs2(int nod, int tata, long long pasi_act, vector<int> pasi_tata);
void add(vector<int>& x, vector<int>& y, long long& pasi);
void scoate(vector<int>& x, vector<int>& y, long long& pasi);
int main() {
  ios_base ::sync_with_stdio(0);
  cin.tie(0);
  cin >> n >> k;
  int a, b;
  while (--n) {
    cin >> a >> b;
    adia[a].push_back(b);
    adia[b].push_back(a);
  }
  dfs1(1, 0);
  vector<int> v(k + 1, 0);
  dfs2(1, 0, 0, v);
  cout << ans / 2ll;
  return 0;
}
void dfs2(int nod, int tata, long long pasi_act, vector<int> pasi_tata) {
  vector<int> _pasi = pasi_tata;
  for (int i(1); i < k; i++) pasi_tata[i + 1] = _pasi[i];
  pasi_tata[1] = _pasi[k];
  pasi_act += _pasi[k];
  for (auto i : adia[nod]) {
    if (i != tata) {
      add(suma[i], pasi_tata, pasi_act);
      pasi_act += pasi[i];
    }
  }
  ans += pasi_act;
  pasi_tata[k]++;
  for (auto i : adia[nod]) {
    if (i != tata) {
      scoate(suma[i], pasi_tata, pasi_act);
      pasi_act -= pasi[i];
      dfs2(i, nod, pasi_act, pasi_tata);
      add(suma[i], pasi_tata, pasi_act);
      pasi_act += pasi[i];
    }
  }
}
void dfs1(int nod, int tata) {
  suma[nod] = vector<int>(k + 1, 0);
  for (auto i : adia[nod]) {
    if (i != tata) {
      dfs1(i, nod);
      add(suma[i], suma[nod], pasi[nod]);
      pasi[nod] += pasi[i];
    }
  }
}
void scoate(vector<int>& x, vector<int>& y, long long& pasi) {
  y[1]--;
  pasi -= 1ll * x[k] + 1ll;
  for (int i(1); i < k; i++) y[i + 1] -= x[i];
  y[1] -= x[k];
}
void add(vector<int>& x, vector<int>& y, long long& pasi) {
  pasi += 1ll * x[k] + 1ll;
  for (int i(1); i < k; i++) y[i + 1] += x[i];
  y[1] += x[k] + 1ll;
}
