#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1000000 + 5;
const int inf = 0x3f3f3f3f;
int n, k, dfs_clock, A[MAXN], dfn[MAXN], sz[MAXN];
vector<int> G[MAXN];
stack<pair<int, int> > s;
inline void add(int u, int v) { G[u].push_back(v); }
void dfs(int u) {
  sz[u] = 1, dfn[u] = ++dfs_clock;
  for (int i = 0; i < (int)G[u].size(); ++i) dfs(G[u][i]), sz[u] += sz[G[u][i]];
}
int maxv[MAXN << 2], addv[MAXN << 2];
inline void up(int o) { maxv[o] = max(maxv[(o << 1)], maxv[((o << 1) | 1)]); }
inline void Add(int o, int k) { maxv[o] += k, addv[o] += k; }
inline void down(int o) {
  if (addv[o]) {
    Add((o << 1), addv[o]);
    Add(((o << 1) | 1), addv[o]);
    addv[o] = 0;
  }
}
inline void modify(int o, int l, int r, int ql, int qr, int k) {
  if (qr < l || ql > r) return;
  if (ql <= l && r <= qr) return Add(o, k);
  down(o);
  modify((o << 1), l, ((l + r) >> 1), ql, qr, k);
  modify(((o << 1) | 1), ((l + r) >> 1) + 1, r, ql, qr, k);
  up(o);
}
int main() {
  scanf("%d %d", &n, &k);
  for (int i = 1; i <= n; ++i) scanf("%d", A + i);
  A[++n] = inf;
  for (int i = 1; i <= n; ++i) {
    while (!s.empty() && s.top().first < A[i]) add(i, s.top().second), s.pop();
    s.push(make_pair(A[i], i));
  }
  dfs(n);
  for (int i = 1; i <= k; ++i) modify(1, 1, n, dfn[i], dfn[i] + sz[i] - 1, 1);
  printf("%d ", maxv[1]);
  for (int i = k + 1; i < n; ++i) {
    modify(1, 1, n, dfn[i], dfn[i] + sz[i] - 1, 1);
    modify(1, 1, n, dfn[i - k], dfn[i - k] + sz[i - k] - 1, -1);
    printf("%d ", maxv[1]);
  }
  return 0;
}
