#include <bits/stdc++.h>
using namespace std;
int n, k, tot, pre[400005], nxt[400005], a[400005], l[400005], r[400005],
    sl[400005], sr[400005];
long long ans;
bool flag[400005];
priority_queue<pair<int, int>, vector<pair<int, int> >,
               greater<pair<int, int> > >
    q;
int main() {
  scanf("%d%d", &n, &k);
  tot = n;
  for (int i = 1; i <= n; i++) {
    scanf("%d", &a[i]);
    pre[i] = i - 1, nxt[i] = i + 1;
    q.push(make_pair(a[i], i));
    l[i] = r[i] = 1;
  }
  nxt[n] = 0;
  while (!q.empty()) {
    int node = q.top().second;
    q.pop();
    if (flag[node]) continue;
    int L = node, R = node, len = 1;
    while (a[pre[L]] == a[node]) L = pre[L], len++;
    while (a[nxt[R]] == a[node]) R = nxt[R], len++;
    int last = 0;
    for (int i = L, j = 1; i != nxt[R]; i = nxt[i], j++) {
      sl[j] = sl[j - 1] + l[i];
      sr[j] = sr[j - 1] + r[i];
      if (i <= n) last = i;
      if (last && j >= k) ans += 1ll * sl[min(j - k + 1, last)] * r[i];
      flag[i] = 1;
    }
    if (len < k) {
      nxt[pre[L]] = pre[nxt[R]] = 0;
      continue;
    }
    for (int i = 1; i <= len / k; i++) {
      r[tot + i] = sr[min(len, (i + 1) * k - 1)] - sr[i * k - 1];
      l[tot + i] = sl[len - (len / k - i + 1) * k + 1] -
                   sl[max(0, len - (len / k - i + 2) * k + 1)];
    }
    nxt[pre[L]] = tot + 1, pre[tot + 1] = pre[L];
    pre[nxt[R]] = tot + len / k, nxt[tot + len / k] = nxt[R];
    for (int i = 1; i < len / k; i++) {
      nxt[tot + i] = tot + i + 1;
      pre[tot + i + 1] = tot + i;
    }
    for (int i = 1; i <= len / k; i++) a[tot + i] = a[L] + 1;
    q.push(make_pair(a[tot + 1], tot + 1));
    tot += len / k;
  }
  printf("%lld\n", ans + n);
  return 0;
}
