#include <bits/stdc++.h>

#define MIN_INT -2147483648
#define MAX_INT 2147483647
#define MIN_LONG -9223372036854775808L
#define MAX_LONG 9223372036854775807L

#define long long long int

using namespace std;

// @author: pashka

int main() {
    ios::sync_with_stdio(false);

    int n, l;
    cin >> n >> l;

    vector<pair<int, vector<int>>> st;

    st.push_back({2000000000, {}});

    long res = 0;

    for (int ii = 0; ii < n; ii++) {
        int x;
        cin >> x;
        while (st.back().first < x) {
            auto r = st.back().first;
            auto p = st.back().second;
            st.pop_back();
            int c = p.size();
            if (c < l) {
                while (st.size() > 1) {
                    st.pop_back();
                }
                break;
            }
            vector<int> cc;
            for (int q = c / l; q > 0; q--) {
                cc.push_back(p[p.size() - q * l]);
            }
            if (st.back().first == r + 1) {
                int xx = st.back().second.back();
                for (int t : cc) {
                    st.back().second.push_back(
                            xx + t
                    );
                }
            } else {
//                for (int i = 1; i < cc.size(); i++) {
//                    cc[i] += cc[i - 1];
//                }
                st.push_back({r + 1, cc});
            }
        }
        if (st.back().first == x) {
            st.back().second.push_back(
                    st.back().second.back() + 1
            );
        } else {
            st.push_back({x, {1}});
        }
        res += 1;
        if (st.back().second.size() >= l) {
            res += st.back().second[st.back().second.size() - l];
        }
        int r = st.back().first;
        int c = st.back().second.size();
//        for (auto p: st) {
//            cout << p.first << ": ";
//            for (auto x : p.second) {
//                cout << x << " ";
//            }
//            cout << "\n";
//        }
        for (int i = (int)st.size() - 2; i >= 0; i--) {
            while (st[i].first != r) {
                r++;
                c /= l;
                if (c == 0) break;
            }
            if (c == 0 || st[i].first != r) break;
            if (c >= l) {
                res += st[i].second[st[i].second.size() - 1];
            } else {
                if (c + st[i].second.size() < l) {
                    break;
                } else {
                    res += st[i].second[st[i].second.size() - (l - c)];
                }
            }
            c += st[i].second.size();
        }
//        cout << "!!! " << res << endl;
    }
    cout << res;

    return 0;
}