#include <bits/stdc++.h>
using namespace std;
const long long mod = 998244353;
const long long inf = mod * mod;
const long long d2 = (mod + 1) / 2;
const double EPS = 1e-11;
const double INF = 1e+10;
const double PI = acos(-1.0);
const int C_SIZE = 3100000;
const int UF_SIZE = 3100000;
namespace {
long long fact[C_SIZE];
long long finv[C_SIZE];
long long inv[C_SIZE];
inline long long Comb(int a, int b) {
  if (a < b || b < 0) return 0;
  return fact[a] * finv[b] % mod * finv[a - b] % mod;
}
void init_C(int n) {
  fact[0] = finv[0] = inv[1] = 1;
  for (int i = 2; i < n; i++) {
    inv[i] = (mod - (mod / i) * inv[mod % i] % mod) % mod;
  }
  for (int i = 1; i < n; i++) {
    fact[i] = fact[i - 1] * i % mod;
    finv[i] = finv[i - 1] * inv[i] % mod;
  }
}
long long pw(long long a, long long b) {
  if (a < 0LL) return 0;
  if (b < 0LL) return 0;
  long long ret = 1;
  while (b) {
    if (b % 2) ret = ret * a % mod;
    a = a * a % mod;
    b /= 2;
  }
  return ret;
}
long long pw_mod(long long a, long long b, long long M) {
  if (a < 0LL) return 0;
  if (b < 0LL) return 0;
  long long ret = 1;
  while (b) {
    if (b % 2) ret = ret * a % M;
    a = a * a % M;
    b /= 2;
  }
  return ret;
}
int pw_mod_int(int a, int b, int M) {
  if (a < 0) return 0;
  if (b < 0) return 0;
  int ret = 1;
  while (b) {
    if (b % 2) ret = (long long)ret * a % M;
    a = (long long)a * a % M;
    b /= 2;
  }
  return ret;
}
int ABS(int a) { return max(a, -a); }
long long ABS(long long a) { return max(a, -a); }
double ABS(double a) { return max(a, -a); }
int sig(double r) { return (r < -EPS) ? -1 : (r > +EPS) ? +1 : 0; }
int UF[UF_SIZE];
void init_UF(int n) {
  for (int i = 0; i < n; i++) UF[i] = -1;
}
int FIND(int a) {
  if (UF[a] < 0) return a;
  return UF[a] = FIND(UF[a]);
}
void UNION(int a, int b) {
  a = FIND(a);
  b = FIND(b);
  if (a == b) return;
  if (UF[a] > UF[b]) swap(a, b);
  UF[a] += UF[b];
  UF[b] = a;
}
}  // namespace
int p[210000];
set<pair<int, int> > S;
set<pair<int, int> > T;
int L[210000];
int R[210000];
int C[210000];
int main() {
  int a, b;
  scanf("%d%d", &a, &b);
  for (int i = 0; i < a; i++) {
    scanf("%d", p + i);
  }
  for (int i = 0; i < a; i++) {
    L[i] = R[i] = 1;
  }
  for (int i = 0; i < a; i++) {
    S.insert(make_pair(i, p[i]));
    T.insert(make_pair(p[i], i));
  }
  long long ret = 0;
  while (1) {
    pair<int, int> d = *(T.begin());
    if (d.first >= mod) break;
    vector<int> v;
    set<pair<int, int> >::iterator it =
        S.lower_bound(make_pair(d.second, d.first));
    while (it != S.end() && it->second == d.first) {
      v.push_back(it->first);
      it++;
    }
    int cur = 0;
    for (int i = 0; i < v.size(); i++) {
      ret += (long long)L[v[i]] * R[v[i]];
      if (i - b + 1 >= 0) {
        cur += L[v[i - b + 1]];
      }
      ret += (long long)cur * R[v[i]];
    }
    vector<pair<pair<int, int>, pair<int, int> > > ad;
    if (v.size() < b) {
      ad.push_back(make_pair(make_pair(d.second, mod), make_pair(0, 0)));
    } else {
      for (int i = 0; i < v.size() / b; i++) {
        ad.push_back(
            make_pair(make_pair(d.second + i, d.first + 1), make_pair(0, 0)));
      }
      int s = v.size();
      for (int i = 0; i < v.size(); i++) {
        int lv = L[v[i]];
        int rv = R[v[i]];
        if (v.size() / b - (v.size() - i) / b < ad.size())
          ad[v.size() / b - (v.size() - i) / b].second.first += lv;
        if (i >= b - 1) ad[(i - b + 1) / b].second.second += rv;
      }
      cur = 0;
      for (int i = 0; i < ad.size(); i++) {
        ret -= (long long)ad[i].second.first * ad[i].second.second;
        if (i - b + 1 >= 0) {
          cur += ad[i - b + 1].second.first;
        }
        ret -= (long long)cur * ad[i].second.second;
      }
    }
    for (int i = 0; i < v.size(); i++) {
      S.erase(make_pair(v[i], d.first));
      T.erase(make_pair(d.first, v[i]));
    }
    for (int i = 0; i < ad.size(); i++) {
      S.insert(ad[i].first);
      T.insert(make_pair(ad[i].first.second, ad[i].first.first));
      L[ad[i].first.first] = ad[i].second.first;
      R[ad[i].first.first] = ad[i].second.second;
    }
  }
  printf("%lld\n", ret);
}
