#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N=5e4+5,INF=1e9;
inline int read(){
char c=getchar();int x=0,f=1;
while(c<‘0‘||c>‘9‘){if(c==‘-‘)f=-1;c=getchar();}
while(c>=‘0‘&&c<=‘9‘){x=x*10+c-‘0‘;c=getchar();}
return x*f;
}
int B,s[N],mp[N],tot;
int n,m,c[N],t1[N],t2[N];
int Bin(int v){
int l=1,r=tot;
while(l<=r){
int mid=(l+r)>>1;
if(mp[mid]==v) return mid;
else if(v<mp[mid]) r=mid-1;
else l=mid+1;
}
return 0;
}
inline bool cmp(int *r,int a,int b,int j){
return a+j<=n&&b+j<=n&&r[a]==r[b]&&r[a+j]==r[b+j];
}
int Log[N],Pow[20],mn[N][17];
void iniST(){
Pow[0]=1;for(int i=1;i<20;i++)Pow[i]=Pow[i-1]<<1;
Log[0]=-1;for(int i=1;i<=n;i++)Log[i]=Log[i/2]+1;
}
void getST(int mn[N][17],int a[]){
for(int i=1;i<=n;i++) mn[i][0]=a[i];
for(int j=1;j<=Log[n];j++)
for(int i=1;i+Pow[j]-1<=n;i++)
mn[i][j]=min(mn[i][j-1],mn[i+Pow[j-1]][j-1]);
}
struct SA{
int sa[N],rnk[N],height[N],mn[N][17];
void getHeight(){
int k=0;
for(int i=1;i<=n;i++) rnk[sa[i]]=i;
for(int i=1;i<=n;i++){
if(k) k--;
if(rnk[i]==1) continue;
int j=sa[rnk[i]-1];
while(i+k<=n&&j+k<=n&&s[i+k]==s[j+k]) k++;
height[rnk[i]]=k;
}
}
void getSA(){
int *r=t1,*k=t2;
for(int i=0;i<=m;i++) c[i]=0;
for(int i=1;i<=n;i++) c[r[i]=s[i]]++;
for(int i=1;i<=m;i++) c[i]+=c[i-1];
for(int i=n;i>=1;i--) sa[c[r[i]]--]=i;
for(int j=1;j<=n;j<<=1){
int p=0;
for(int i=n-j+1;i<=n;i++) k[++p]=i;
for(int i=1;i<=n;i++) if(sa[i]>j) k[++p]=sa[i]-j;
for(int i=0;i<=m;i++) c[i]=0;
for(int i=1;i<=n;i++) c[r[k[i]]]++;
for(int i=1;i<=m;i++) c[i]+=c[i-1];
for(int i=n;i>=1;i--) sa[c[r[k[i]]]--]=k[i];
swap(r,k);p=0;r[sa[1]]=++p;
for(int i=2;i<=n;i++) r[sa[i]]=cmp(k,sa[i],sa[i-1],j)?p:++p;
if(p>=n) break;m=p;
}
}
int lcp(int x,int y){//printf("lcp %d %d\n",x,y);
x=rnk[x];y=rnk[y];
if(x>y) swap(x,y);x++;//printf("rnk %d %d\n",x,y);
int t=Log[y-x+1];//printf("t %d %d %d\n",t,mn[x][t],mn[y-Pow[t]+1][t]);
return min(mn[x][t],mn[y-Pow[t]+1][t]);
}
void ini(){
getSA();getHeight();getST(mn,height);
}
void test(){
puts("test");
for(int i=1;i<=n;i++) printf("%d ",s[i]);puts("");
for(int i=1;i<=n;i++) printf("%d ",rnk[i]);puts("");
for(int i=1;i<=n;i++) printf("%d ",sa[i]);puts("");
for(int i=1;i<=n;i++) printf("%d ",height[i]);puts("");
puts("");
}
}a,b;
int ans;
void solve(int L){//printf("sol %d\n",L);
for(int i=1;i+B+L<=n;i+=L)
if(s[i]==s[i+B+L]){//puts("begin");
int r=a.lcp(i,i+B+L),l=b.lcp(n-i+2,n-i-B-L+2);
l=min(l,L-1);r=min(r,L);
//printf("ss %d %d %d %d\n",i,i+B+L,l,r);
if(l+r>=L) ans+=l+r+1-L;//,printf("hi %d %d\n",i,i+B+L);
//puts("end");
}
}
int main(){
//freopen("in.txt","r",stdin);
n=read();B=read();
for(int i=1;i<=n;i++){
s[i]=read();
if(i!=1) mp[++tot]=s[i-1]=s[i]-s[i-1];
}
n--;
sort(mp+1,mp+1+n);
tot=0;mp[++tot]=mp[1];
for(int i=2;i<=n;i++) if(mp[i]!=mp[i-1]) mp[++tot]=mp[i];
for(int i=1;i<=n;i++) s[i]=Bin(s[i]);
m=n;
iniST();
a.ini();//a.test();
reverse(s+1,s+1+n);
b.ini();//b.test();
reverse(s+1,s+1+n);
for(int L=1;L+L+B<=n;L++) solve(L);
printf("%d",ans);
}