#include <bits/stdc++.h>
using namespace std;
const int MOD = 1000000007;
int n, k, a[1000010], l[1000010], r[1000010];
stack<int> s;
long long cal(int x, int y) {
  if (x < 0 || y - x + 1 < k) return 0;
  long long t = (y - x + 2 - k) / (k - 1) + 1;
  long long res = (t * (y - x + 2 - k) % MOD -
                   t * (t - 1) / 2 % MOD * (k - 1) % MOD + MOD) %
                  MOD;
  return res;
}
int main() {
  scanf("%d%d", &n, &k);
  for (int i = 0; i < n; i++) scanf("%d", &a[i]);
  for (int i = 0; i < n; i++) {
    l[i] = i;
    while (!s.empty() && a[s.top()] < a[i]) {
      l[i] = l[s.top()];
      s.pop();
    }
    s.push(i);
  }
  while (!s.empty()) s.pop();
  for (int i = n - 1; i >= 0; i--) {
    r[i] = i;
    while (!s.empty() && a[s.top()] <= a[i]) {
      r[i] = r[s.top()];
      s.pop();
    }
    s.push(i);
  }
  long long ans = 0;
  for (int i = 0; i < n; i++) {
    long long temp = cal(l[i], r[i]) - cal(l[i], i - 1) - cal(i + 1, r[i]);
    temp = temp % MOD * a[i] % MOD;
    ans = (ans + temp) % MOD;
  }
  printf("%lld\n", ans);
  return 0;
}
