#include <iostream>
#include <algorithm>
int GetIntValueFromUser() {
int value = 0;
std::cin >> value;
return value;
}
std::vector<int> GetFirstQueueOfValuesFromUser(int number_of_values) {
std::vector<int> first_window(number_of_values);
std::generate(std::begin(first_window), std::end(first_window),
GetIntValueFromUser);
return first_window;
}
std::vector<int> GetSortedQueue(const std::vector<int>& unsorted_queue) {
std::vector<int> sorted_queue(unsorted_queue.size());
std::partial_sort_copy(std::begin(unsorted_queue), std::end(unsorted_queue),
std::begin(sorted_queue), std::end(sorted_queue));
return sorted_queue;
}
int GetMinFromSortedQueue(const std::vector<int>& sorted_queue) {
return sorted_queue.front();
}
void ShowMinOfSortedQueue(const std::vector<int>& sorted_queue) {
std::cout << GetMinFromSortedQueue(sorted_queue) << '\n';
}
void SwapValues(std::vector<int>& sorted_queue, int old_value, int new_value) {
sorted_queue.erase(std::lower_bound(std::begin(sorted_queue),
std::end(sorted_queue), old_value));
sorted_queue.insert(std::lower_bound(std::begin(sorted_queue),
std::end(sorted_queue), new_value),
new_value);
}
int main() {
size_t n = GetIntValueFromUser();
size_t k = GetIntValueFromUser();
auto queue = GetFirstQueueOfValuesFromUser(k);
auto sorted_queue = GetSortedQueue(queue);
ShowMinOfSortedQueue(sorted_queue);
for (size_t i = 0; i < n - k; ++i) {
auto new_value_from_user = GetIntValueFromUser();
auto oldest_position = i % queue.size();
auto oldes_value_from_user = queue[oldest_position];
SwapValues(sorted_queue, oldes_value_from_user, new_value_from_user);
ShowMinOfSortedQueue(sorted_queue);
std::swap(queue[oldest_position], new_value_from_user);
}
}