```go
package main
import (
"bufio"
"fmt"
"os"
"strconv"
)
func main() {
scanner := bufio.NewScanner(os.Stdin)
scanner.Split(bufio.ScanWords)
nextInt := func() int {
scanner.Scan()
res, _ := strconv.Atoi(scanner.Text())
return res
}
if !scanner.Scan() {
return
}
n, _ := strconv.Atoi(scanner.Text())
k := nextInt()
a := make([]int, n)
maxA := 1
for i := 0; i < n; i++ {
a[i] = nextInt()
if a[i] > maxA {
maxA = a[i]
}
}
left, right := 1, maxA
ans := 1
p := make([]int, n+1)
for left <= right {
mid := left + (right - left) / 2
for i := 0; i < n; i++ {
val := -1
if a[i] >= mid {
val = 1
}
p[i+1] = p[i] + val
}
minP := 0
possible := false
for j := k; j <= n; j++ {
if p[j-k] < minP {
minP = p[j-k]
}
if p[j] > minP {
possible = true
break
}
}
if possible {
ans = mid
left = mid + 1
} else {
right = mid - 1
}
}
fmt.Println(ans)
}
```