#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e6+5;
const int M=25;
const int mod=1e9+7;
int fx[N][M],fi[N][M];
int a[N],b[N];
int n,k;
int p[M];
int lg[N];
void STx()
{
for(int i=1; i<=n; i++) fx[i][0]=a[i];
for(int j=1; p[j]<=n; j++)
{
for(int i=1; i+p[j]-1<=n; i++)
{
fx[i][j]=max(fx[i][j-1],fx[i+p[j-1]][j-1]);
}
}
}
int mx(int l,int r)
{
int len=lg[r-l+1];
return max(fx[l][len],fx[r-p[len]+1][len]);
}
void STi()
{
for(int i=1; i<=n; i++) fi[i][0]=b[i];
for(int j=1;p[j]<=n; j++)
{
for(int i=1; i+p[j]-1<=n; i++)
{
fi[i][j]=min(fi[i][j-1],fi[(i+p[j-1])][j-1]);
}
}
}
int mi(int l,int r)
{
int len=lg[r-l+1];
// cout<<len<<'\n';
// cout<<fi[l][len]<<' '<<fi[r-p[len]+1][len]<<'\n';
return min(fi[l][len],fi[r-p[len]+1][len]);
}
int askl(int l,int rl)
{
int res=n;
int L=l,R=rl;
while(L<=R)
{
int mid=(L+R)>>1;
if(mx(l,mid)>=mi(l,mid))
{
res=min(res,mid);
R=mid-1;
}
else L=mid+1;
}
if(mx(l,res)!=mi(l,res)) return 0;
return res;
}
int askr(int l,int rr)
{
int res=l;
int L=l,R=rr;
while(L<=R)
{
int mid=(L+R)>>1;
if(mx(l,mid)<=mi(l,mid))
{
res=max(res,mid);
L=mid+1;
}
else R=mid-1;
}
if(mx(l,res)!=mi(l,res)) return -1;
return res;
}
int main()
{
scanf("%d%d",&n,&k);
p[0]=1;
for(int i=1;i<=25;i++) p[i]=p[i-1]*2;
lg[1]=0;
for(int i=2;i<=n;i++) lg[i]=lg[i/2]+1;
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
b[i]=a[i]+k;
}
ll ans=0;
STi();
STx();
for(int i=1;i<=n;i++)
{
ans+=(askr(i,n)-askl(i,n)+1);
}
printf("%lld\n",ans);
return 0;
}