```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")
}
```