#include <bits/stdc++.h>
using namespace std;
long long power(long long a, long long b, long long mod) {
  long long c = 1;
  while (b > 0) {
    if (b % 2) c *= a, c %= mod;
    b /= 2;
    a *= a;
    a %= mod;
  }
  return c;
}
const long long N = (1e6) + 10;
const long long M = 320;
const long long Mod = 1e9 + 7;
long long v[N], p1[N], p2[N], k;
long long fun(long long a, long long b, long long c, long long d) {
  long long st = (c - b - 1) / d;
  long long en = (c - a + d - 1) / d;
  long long cnt = d;
  cnt *= ((en * en + en) / 2 - (st * st + st) / 2) % Mod;
  long long c1 = (c - b - 1 - st * d) % Mod;
  c1 *= st + 1;
  c1 %= Mod;
  long long c2 = (en * d - (c - a)) % Mod;
  c2 *= en;
  c2 %= Mod;
  cnt = (cnt - c1 - c2) % Mod;
  cnt += Mod;
  cnt %= Mod;
  if (b == c) {
    cnt = d;
    cnt *= (en * en + en) / 2 % Mod;
    cnt -= c2;
    cnt += Mod;
    cnt %= Mod;
    cnt++;
    cnt %= Mod;
  }
  return cnt;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cout << setprecision(25);
  long long n, i, j, a, b, c, d;
  cin >> n >> k;
  for (i = 0; i < n; i++) cin >> v[i];
  stack<pair<long long, long long> > st;
  st.push({Mod, -1});
  for (i = 0; i < n; i++) {
    while (1) {
      auto z = st.top();
      if (z.first > v[i]) break;
      st.pop();
    }
    auto z = st.top();
    p1[i] = z.second;
    st.push({v[i], i});
  }
  while (!st.empty()) st.pop();
  st.push({Mod, n});
  for (i = n - 1; i >= 0; i--) {
    while (1) {
      auto z = st.top();
      if (z.first >= v[i]) break;
      st.pop();
    }
    auto z = st.top();
    p2[i] = z.second;
    st.push({v[i], i});
  }
  long long le[n + 5], ri[n + 5];
  deque<long long> Q;
  for (i = 0; i < n; i++) {
    while ((!Q.empty()) && (v[Q.back()] < v[i])) {
      a = Q.back();
      ri[a] = i;
      Q.pop_back();
    }
    if (Q.empty()) {
      le[i] = 0;
    } else
      le[i] = (long long)(Q.back()) + 1;
    Q.push_back(i);
  }
  while (!Q.empty()) {
    a = Q.front();
    Q.pop_front();
    ri[a] = n;
  }
  long long ans = 0;
  for (i = 0; i < n; i++) {
    long long one = fun(p1[i] + 1, i, i, k - 1);
    long long two = fun(p1[i] + 1, i, p2[i], k - 1);
    ans += (((two - one + Mod) % Mod) * v[i]) % Mod;
    ans %= Mod;
  }
  cout << ans << '\n';
  return 0;
}
