#include <bits/stdc++.h>
using namespace std;
const int maxn = 1000005;
const int unit = 450;
int a[maxn], l[maxn], r[maxn], tim;
int n, m;
stack<int> s;
long long t[maxn << 2], lazy[maxn << 2];
vector<int> v[maxn];
void dfs(int x) {
  l[x] = ++tim;
  for (auto u : v[x]) dfs(u);
  r[x] = tim;
}
void add(int rt, int d) {
  lazy[rt] += 1ll * d;
  t[rt] += 1ll * d;
}
void pd(int rt) {
  if (lazy[rt]) {
    add(((rt << 1) | 1), lazy[rt]);
    add((rt << 1), lazy[rt]);
    lazy[rt] = 0;
  }
}
void pu(int rt) { t[rt] = max(t[((rt << 1) | 1)], t[(rt << 1)]); }
void update(int L, int R, int d, int l, int r, int rt) {
  if (L <= l && r <= R) {
    add(rt, d);
    return;
  }
  int mid = l + r >> 1;
  pd(rt);
  if (L <= mid) update(L, R, d, l, mid, rt << 1);
  if (mid < R) update(L, R, d, mid + 1, r, rt << 1 | 1);
  pu(rt);
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cin >> n >> m;
  for (int i = (1); i < (n + 1); i++) {
    cin >> a[i];
    while ((int)s.size() && a[i] > a[s.top()]) {
      v[i].push_back(s.top());
      s.pop();
    }
    s.push(i);
  }
  while ((int)s.size()) v[n + 1].push_back(s.top()), s.pop();
  dfs(n + 1);
  for (int i = (1); i < (m + 1); i++) update(l[i], r[i], 1, 1, tim, 1);
  cout << t[1] << " ";
  for (int i = (m + 1); i < (n + 1); i++) {
    update(l[i], r[i], 1, 1, tim, 1);
    update(l[i - m], r[i - m], -n, 1, tim, 1);
    cout << t[1] << " ";
  }
  return 0;
}
