].tag;
tr[x].tag=0;
}
inline void pup(int x){
tr[x].mn=min(tr[x<<1].mn,tr[x<<11].mn);
}
inline void upd...R,int v){
if(L<=l&&r<=R){
tr[x].mn+=v;
tr[x].tag+=v;
return ;
}
psd(x);
int mid=l+r>>1;
if(Lupd...(x<<1,l,mid,L,R,v);
if(R>mid) upd(x<<11,mid+1,r,L,R,v);
pup(x);
}
inline void build(int x,int l,int r...-1:-i);
for(int i=1;iupd(1,1,tot,1,a[i],1);
ans=check();
for(int i=m+1;iupd(1,1,tot...,1,a[i-m],-1),upd(1,1,tot,1,a[i],1),ans+=check();
printf("%d\n",ans);
}