rt.
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=3e5+5;
int n,m,tot,ans,tree[N];
struct node{int w,id;}a[N];
struct pr{int l,r;}p[N<<1];
struct qs{int l,r,id;}q[N];
bool cmp1(node X,node Y){return X.w<Y.w;}
bool cmp2(pr X,pr Y){if(X.r!=Y.r)return X.r<Y.r;return X.l<Y.l;}
bool cmp3(qs X,qs Y){if(X.r!=Y.r)return X.r<Y.r;return X.l<Y.l;}
pr G(int x,int y){return{min(a[x].id,a[y].id),max(a[x].id,a[y].id)};}
int lb(int x){return x&(-x);}
void upd(int x,int val){while(x<=n)tree[x]=max(tree[x],val),x+=lb(x);return;}
int qy(int x){int res=0;while(x)res=max(res,tree[x]),x-=lb(x);return res;}
signed main(){
cin>>n>>m;
if(n==1){cout<<0;return 0;}
for(int i=1;i<=n;i++){cin>>a[i].w;a[i].id=i;}
sort(a+1,a+n+1,cmp1);
p[++tot]=G(1,2),p[++tot]=G(n-1,n);
for(int i=2;i<n;i++){
if(a[i].w-a[i-1].w==a[i+1].w-a[i].w)p[++tot]=G(i-1,i),p[++tot]=G(i,i+1);
else if(a[i].w-a[i-1].w>a[i+1].w-a[i].w)p[++tot]=G(i,i+1);
else p[++tot]=G(i-1,i);
}
sort(p+1,p+tot+1,cmp2);
// for(int i=1;i<=tot;i++)cout<<p[i].l<<" "<<p[i].r<<"\n";
for(int i=1;i<=m;i++){cin>>q[i].l>>q[i].r;q[i].id=i;}
sort(q+1,q+m+1,cmp3);
for(int i=1,j=1;i<=m;i++){
while(j<=tot&&p[j].r<=q[i].r)upd(p[j].l,1),j++;
ans+=q[i].id*(j-1-qy(q[i].l-1));
// cout<<(j-1-qy(q[i].l-1))<<" "<<q[i].id<<"\n";
}
cout<<ans;
return 0;
}