Problem:
Score : 700 points

Problem Statement

Snuke has a permutation (P_0,P_1,\cdots,P_{N-1}) of (0,1,\cdots,N-1).

Now, he will perform the following operation exactly once:

Choose K consecutive elements in P and sort them in ascending order.

Find the number of permutations that can be produced as P after the operation.

Constraints

2 \leq N \leq 200000

2 \leq K \leq N

0 \leq P_i \leq N-1

P_0,P_1,\cdots,P_{N-1} are all different.

All values in input are integers.

Input

Input is given from Standard Input in the following format:

N K
P_0 P_1 \cdots P_{N-1}

Output

Print the number of permutations that can be produced as P after the operation.

Sample Input 1

5 3
0 2 1 4 3

Sample Output 1

2

Two permutations can be produced as P after the operation: (0,1,2,4,3) and (0,2,1,3,4).

Sample Input 2

4 4
0 1 2 3

Sample Output 2

1

Sample Input 3

10 4
2 0 1 3 7 5 4 6 8 9

Sample Output 3

6

Solution in Java8 (OpenJDK 1.8.0) (judge verdict: Runtime Error)

import java.util.*;

public class Main {
  public static void main (String[] args) {
    Scanner sc = new Scanner(System.in);

    int n = sc.nextInt();
    int k = sc.nextInt();

    int[] o = new int[n];
    String p = "";
    for (int i = 0; i < n; i++) {
      o[i] = sc.nextInt();
      p += o[i];
    }

    HashSet<String> h = new HashSet<>();

    String[] s = new String[n-(n-k)];
    int cnt = 1;
    for (int i = 0; i < (n-(n-k)); i++) {
      s[i] = "";
      String q[] = p.substring(i, i+k).split("");
      Arrays.sort(q);
      String t = "";
      for (int j = 0; j < k; j++) {
        t += q[j];
      }
      if (i > 0) s[i] += p.substring(0, i);
      s[i] += t;
      if (i < (n-k)) s[i] += p.substring(i+k, n);
      h.add(s[i]);
    }

    System.out.println(h.size());

  }
}