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 C++14 (GCC 5.4.1) (judge verdict: Accepted)

#include<bits/stdc++.h>
#define ll long long
#define fr(i,x,y) for(int i=(x);i<=(y);i++)
#define rf(i,x,y) for(int i=(x);i>=(y);i--)
#define frl(i,x,y) for(int i=(x);i<(y);i++)
using namespace std;
const int N=200002;
int n,K,a[N];
int h[N],t,w;
int mn[N],mx[N];

void read(int &x){
	char ch=getchar();x=0;
	for(;ch<'0'||ch>'9';ch=getchar());
	for(;ch>='0'&&ch<='9';ch=getchar()) x=(x<<3)+(x<<1)+ch-'0';
}

void push(int x,bool (*cmp)(int,int)){
	while(w>=t&&cmp(a[h[w]],a[x])) w--;
	h[++w]=x;
}

int find(int x){
	while(h[t]<=x-K) t++;
	return a[h[t]];
}

bool big(int x,int y){ return x>y; }
bool small(int x,int y){ return x<y; }

void init(){
	t=1;w=0;
	fr(i,1,n){
		push(i,big);
		mn[i]=find(i);
	}
	t=1;w=0;
	fr(i,1,n){
		push(i,small);
		mx[i]=find(i);
	}
}

int main(){
	read(n);read(K);
	fr(i,1,n) read(a[i]);
	init();
	int flag=0;
	fr(i,2,K) if (a[i-1]>a[i]) flag++;
	int bo=0,ans=0;
	fr(i,K,n){
		if (flag==0) bo=1;
		 else{
		 	if (i==K||a[i-K]!=mn[i-1]||a[i]!=mx[i]) ans++;
		 }
		flag-=a[i-K+1]>a[i-K+2];
		flag+=a[i]>a[i+1];
	}
	cout<<ans+bo<<endl;
	return 0;
}