#include <iostream>
#include <set>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n,k;
cin>>n>>k;
int a[n];
for(int i=0;i<n;i++)
{
cin>>a[i];
}
vector<int> V;
for(int i=0;i<k;i++)
{
V.push_back(a[i]);
}
sort(V.begin(),V.end());
multiset<int> LS;
multiset<int> RS;
if(k%2 == 0)
{
for(int i=0;i<V.size()/2;i++)
{
LS.insert(V[i]);
}
for(int i=V.size()/2;i<V.size();i++)
{
RS.insert(V[i]);
}
cout<<*LS.rbegin()<<" ";
for(int i=k;i<n;i++)
{
if(LS.find(a[i-k]) != LS.end())
{
LS.erase(LS.find(a[i-k]));
LS.insert(*RS.begin());
RS.erase(RS.begin());
}
else if(RS.find(a[i-k]) != RS.end())
{
RS.erase(RS.find(a[i-k]));
}
if(LS.size() > 0 && a[i] >= *(LS.rbegin()))
{
RS.insert(a[i]);
}
else
{
LS.insert(a[i]);
}
if(LS.size() < RS.size())
{
LS.insert(*(RS.begin()));
RS.erase(RS.begin());
}
else if(LS.size() > RS.size())
{
while((LS.size() - RS.size()) > 0)
{
RS.insert(*(LS.rbegin()));
LS.erase(--LS.end());
}
}
//cout<<"LS.size()="<<LS.size()<<" RS.size()="<<RS.size()<<endl;
cout<<*LS.rbegin()<<" ";
}
}
else
{
for(int i=0;i<V.size()/2+1;i++)
{
LS.insert(V[i]);
}
for(int i=V.size()/2+1;i<V.size();i++)
{
RS.insert(V[i]);
}
cout<<*LS.rbegin()<<" ";
for(int i=k;i<n;i++)
{
if(LS.find(a[i-k]) != LS.end())
{
LS.erase(LS.find(a[i-k]));
LS.insert(*RS.begin());
RS.erase(RS.begin());
}
else if(RS.find(a[i-k]) != RS.end())
{
RS.erase(RS.find(a[i-k]));
}
if(LS.size() > 0 && a[i] >= *(LS.rbegin()))
{
RS.insert(a[i]);
}
else
{
LS.insert(a[i]);
}
if(LS.size() < RS.size())
{
LS.insert(*(RS.begin()));
RS.erase(RS.begin());
}
else if(LS.size() > RS.size())
{
while((LS.size() - RS.size()) > 1)
{
RS.insert(*(LS.rbegin()));
LS.erase(--LS.end());
}
}
//cout<<"LS.size()="<<LS.size()<<" RS.size()="<<RS.size()<<endl;
cout<<*LS.rbegin()<<" ";
}
}
return 0;
}