← Home
```go
package main

import (
	"bufio"
	"os"
	"strconv"
)

func main() {
	scanner := bufio.NewScanner(os.Stdin)
	scanner.Split(bufio.ScanWords)

	read := func() int {
		scanner.Scan()
		v, _ := strconv.Atoi(scanner.Text())
		return v
	}

	if !scanner.Scan() {
		return
	}
	n, _ := strconv.Atoi(scanner.Text())
	k := read()

	a := make([]int, n)
	for i := 0; i < n; i++ {
		a[i] = read()
	}

	l, r := 1, n
	ans := 1
	p := make([]int, n+1)

	for l <= r {
		mid := (l + r) >> 1
		found := false
		p[0] = 0
		minVal := 0

		for i := 0; i < n; i++ {
			val := -1
			if a[i] >= mid {
				val = 1
			}
			p[i+1] = p[i] + val

			if i+1 >= k {
				if i+1 == k {
					minVal = p[0]
				} else {
					if p[i+1-k] < minVal {
						minVal = p[i+1-k]
					}
				}
				if p[i+1] > minVal {
					found = true
					break
				}
			}
		}

		if found {
			ans = mid
			l = mid + 1
		} else {
			r = mid - 1
		}
	}

	os.Stdout.WriteString(strconv.Itoa(ans) + "\n")
}
```