#include <bits/stdc++.h>
using namespace std;
stack<int> s;
int n, k, a[1100000], l[1100000], r[1100000];
long long count(int l, int r, int t) {
  int k = (r - l) / t + 1;
  return ((1ll * l + r) * k / 2) % 1000000007;
}
int calc(int x, int y, int z) {
  int n = x + y + z;
  int a = x % (k - 1), b = n % (k - 1), c = z % (k - 1);
  return (count(b, n, k - 1) - count(a, x, k - 1) - count(c, z, k - 1)) %
         1000000007;
}
int main() {
  scanf("%d%d", &n, &k);
  for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
  s.push(1);
  for (int i = 2; i <= n; i++) {
    while (s.size() && a[i] >= a[s.top()]) s.pop();
    if (s.size()) l[i] = s.top();
    s.push(i);
  }
  while (s.size()) s.pop();
  r[n] = n + 1;
  s.push(n);
  for (int i = n - 1; i >= 1; i--) {
    while (s.size() && a[i] > a[s.top()]) s.pop();
    if (s.size())
      r[i] = s.top();
    else
      r[i] = n + 1;
    s.push(i);
  }
  long long ans = 0;
  for (int i = 1; i <= n; i++) {
    int x = max(i - l[i] - 1 - k + 1, 0), z = max(r[i] - i - 1 - k + 1, 0);
    int y = max(r[i] - l[i] - 1 - k + 1 - x - z, 0);
    ans = (ans + 1ll * calc(x, y, z) * a[i] % 1000000007) % 1000000007;
  }
  if (ans < 0) ans += 1000000007;
  cout << ans;
  return 0;
}
