#include
#include
#include
#include
#include
#include
using namespace std;
typedef long long ll;
const int maxn = 2e5 + 10;
int n, k;
int arr[maxn];
multiset lower_values, greater_values;
void insert_value(int x) {
int max_lower_value = *lower_values.rbegin();
if(max_lower_value < x) {
greater_values.insert(x);
if(greater_values.size() > k / 2) {
int smallest_greater = *greater_values.begin();
lower_values.insert(smallest_greater);
greater_values.erase(greater_values.find(smallest_greater));
}
}
else {
lower_values.insert(x);
if(lower_values.size() > (k + 1) / 2) {
int max_in_lower = *lower_values.rbegin();
greater_values.insert(max_in_lower);
lower_values.erase(lower_values.find(max_in_lower));
}
}
}
void remove_element(int x) {
if(greater_values.find(x) != greater_values.end()) {
greater_values.erase(greater_values.find(x));
}
else if(lower_values.find(x) != lower_values.end()) {
lower_values.erase(lower_values.find(x));
}
if(lower_values.empty()) {
int smallest_in_greater = *greater_values.begin();
lower_values.insert(smallest_in_greater);
greater_values.erase(greater_values.find(smallest_in_greater));
}
}
int main() {
ios_base::sync_with_stdio(false);
cin >> n >> k;
for(int i = 0; i < n; i++) {
cin >> arr[i];
}
lower_values.insert(arr[0]);
for(int i = 1; i < k; i++) {
insert_value(arr[i]);
}
cout << *lower_values.rbegin() << " ";
for(int i = k; i < n; i++){
if(k > 1) {
remove_element(arr[i - k]);
insert_value(arr[i]);
}
else {
insert_value(arr[i]);
remove_element(arr[i - 1]);
}
cout << *lower_values.rbegin() << " " ;
}
return 0;
}