#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
using namespace std;
long long arr[1000000], L[1000000], R[1000000], st[1000000], k;
const long long MOD = 1e9 + 7;
inline long long f(long long L) {
  long long t = L / k;
  if (t == 0) return 0;
  if (L % k == 0) --t;
  if (t == 0) return 0;
  return t * L - k * (t + 1) * t / 2;
}
int main() {
  ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  long long n, top, l, r, ans = 0, tmp;
  cin >> n >> k, --k;
  for (int i = 0; i < n; ++i) cin >> arr[i];
  top = -1;
  for (int i = 0; i < n; ++i) {
    while (top > -1 && arr[i] >= arr[st[top]]) --top;
    if (top > -1)
      L[i] = st[top] + 1;
    else
      L[i] = 0;
    st[++top] = i;
  }
  top = -1;
  for (int i = n - 1; i >= 0; --i) {
    while (top > -1 && arr[i] > arr[st[top]]) --top;
    if (top > -1)
      R[i] = st[top] - 1;
    else
      R[i] = n - 1;
    st[++top] = i;
  }
  for (int i = 0; i < n; ++i) {
    tmp = ans;
    ans = (ans + f(R[i] - L[i] + 1) % MOD * arr[i]) % MOD;
    ans = (ans - f(i - L[i]) % MOD * arr[i] % MOD + MOD) % MOD;
    ans = (ans - f(R[i] - i) % MOD * arr[i] % MOD + MOD) % MOD;
  }
  cout << ans << "\n";
}
