import java.util.*

fun slideMin(a: List<Int>, k: Int): ArrayList<Int> {
  val res = arrayListOf<Int>()
  val deq: Deque<Int> = LinkedList()
  for (r in 0 until a.size) {
    val l = r - k + 1
    while (!deq.isEmpty() && a[deq.getLast()] >= a[r]) deq.removeLast()
    deq.add(r)
    if (l < 0) continue
    res.add(deq.getFirst())
    if (deq.getFirst() == l) deq.removeFirst()
  }
  return res
}

fun slideMax(a: List<Int>, k: Int): ArrayList<Int> {
  val res = arrayListOf<Int>()
  val deq: Deque<Int> = LinkedList()
  for (r in 0 until a.size) {
    val l = r - k + 1
    while (!deq.isEmpty() && a[deq.getLast()] <= a[r]) deq.removeLast()
    deq.add(r)
    if (l < 0) continue
    res.add(deq.getFirst())
    if (deq.getFirst() == l) deq.removeFirst()
  }
  return res
}

fun main(args: Array<String>) {
  val (n, k) = readLine()!!.split(" ").map { it.toInt() }
  val p = readLine()!!.split(" ").map { it.toInt() }
  val isUp = IntArray(n) { 
    if (it == 0) {
      0
    } else {
      if (p[it - 1] < p[it]) 1 else 0
    }
  }
  val cs = mutableListOf<Int>(0)
  isUp.reduce { buf, value ->
    cs.add(buf + value)
    buf + value
  }

  var sorted = 0
  var ans = 0
  val mn = slideMin(p, k + 1)
  val mx = slideMax(p, k + 1)
  for (i in 0..n - k) {
    val d = cs[i + k - 1] - cs[i]
    if (d == k - 1) {
      sorted = 1 
      continue
    }
    if (i > 0 && mn[i - 1] == i - 1 && mx[i - 1] == i + k - 1) continue
    ans++
  }
  println(ans + sorted)
}
