package main
import (
"bufio"
"fmt"
"os"
"strconv"
)
func main() {
for {
scanner := bufio.NewScanner(os.Stdin)
// 设置大缓冲区,防止大输入时出错
buf := make([]byte, 1024*1024) // 1MB
scanner.Buffer(buf, 1024*1024)
scanner.Split(bufio.ScanWords) // 按单词扫描(空格、换行等分隔)
// 读取第一行:n
scanner.Scan()
num, _ := strconv.Atoi(scanner.Text())
if num == 0 {
break
}
scanner.Scan()
w, _ := strconv.Atoi(scanner.Text())
if num == 0 {
break
}
arr := make([]int, num)
for i := 0; i < num; i++ {
scanner.Scan()
arr[i], _ = strconv.Atoi(scanner.Text())
}
window := []int{}
res := []int{}
for i := 0; i < len(arr); i++ {
// eg1 17/20
// for len(window)>0 {
// if arr[i] > arr[window[len(window)-1]] {
// window = window[:len(window)-1]
// } else {
// break
// }
// }
// eg2 19/20
l, r := 0, len(window)-1
for l <= r {
mid := (r-l)/2 + l
if arr[window[mid]] < arr[i] {
r = mid - 1
} else {
l = mid + 1
}
}
if len(window) > 0 {
window = window[:l]
}
window = append(window, i)
if i-window[0] == w {
window = window[1:]
}
if i >= w-1 {
res = append(res, window[0])
}
}
for i := 0; i < len(res); i++ {
if i == len(res)-1 {
fmt.Println(arr[res[i]])
} else {
fmt.Printf("%d ", arr[res[i]])
}
}
}
}