//Adrian Panaete - 100 puncte
//solutia foloseste arbori indexati binari
//valorile citite se maresc cu 500001 pentru a intra in intervalul [1,1000001]
//x[]=vectorul valorilor din sir
//c[]=contorul valorilor din intervalul curent de lungime 2L+1
//s[]=vector construit pe principiul arborilor indexati binari
//s[] ma ajuta sa raspund in timp logaritmic la intrebarea:
//"Cate numere mai mici sau egale cu o valoare data avem in secventa curenta de lungime 2L+1 ?
#include<cstdio>
#define N 1<<20
int n,i,L,R,M,Q,P,LO,HI,MI,c[N],s[N],x[N],sol,ver();
void read(),solve(),aduna(int),scade(int);
int main()
{
	read();
	solve();
	return 0;
}
void read()
{
	freopen("echilibru.in","r",stdin);
	freopen("echilibru.out","w",stdout);
	scanf("%d%d",&n,&P);//Am redenumit P valoarea L din enunt
	Q=R=2*P+1;//Q=valoare constanta Q=2P+1 ; R=capat stanga pentru secventa curenta
	M=P+1;//M=Mijloc pentru secventa curenta
	L=1;//L=capat stanga pentru secventa curenta
	//citesc primele R valori 
	for(i=1;i<=R;i++)
	{
		scanf("%d",&x[i]);
		x[i]+=500001;//modific cu 500001
		aduna(x[i]);//modific contorul lui x[i] actualizeaz s[]
	}
	//citesc restul valorilor
	for(i=R+1;i<=n;i++)
	{
		scanf("%d",&x[i]);
		x[i]+=500001;
	}		
}
void solve()
{
	for(;;)
	{
		sol+=ver();//verific daca secventa e buna si incrementeaz in caz afirmativ solutia
		R++;//maresc capat dreapta
		if(R==n+1)break;//daca am iesit din sir ma opresc
		aduna(x[R]);//actualizez s[] implicand valoarea din capatul dreapta
		scade(x[L]);//actualizez s[] eliminand vechea valoarea din stanga
		L++;M++;//maresc capatul stanga si mijlocul 
	}
	printf("%d\n",sol);
}
void aduna(int v)
{
	c[v]++;//adaug valoarea v
	//incrementez suma contoarelor pentru valorile >=v pe pricipiul arborilor binari
	//vezi problema "arbori indexati binar" din arhiva ecucationala infoarena
	//folosesc un caz particular:
	//modificarea valorii in cazul asta se face doar cu o unitate la pozitia v
	for(int u=1;v<=1000001;u<<=1)
		if(u&v){s[v]++;v+=u;}
}
void scade(int v)
{
	c[v]--;//elimin valoarea v
	//analog cu aduna doar ca scad o unitate la pozitia v
	for(int u=1;v<=1000001;u<<=1)
		if(u&v){s[v]--;v+=u;}
}
int ver()
{
	//verific daca o seventa e buna/rea returnand 1/0
	
	int v=x[M];//stabilim valoarea situata in mijloc
	MI=c[v];//stabilim cate valori egale cu v sunt in secventa
	LO=0;//calculeaz deocamdata cate valori mai mici sau egale cu v avem
	//LO devine deocamdata suma contoarelor de valori <=v
	for(int u=1;v;u<<=1)
		if(u&v){LO+=s[v];v-=u;}
	HI=Q-LO;//(nr valori > v)  = (toate 2P+1) - (nr valori < = v)
	LO-=MI;//(nr valori < v) = (nr valori < = v) - (nr valori ==v)
	if(LO>P||HI>P)return 0; //daca cele < sau > depasesc P secventa nu e buna
	return 1;//altfel e buna
}

