#include<bits/stdc++.h>
#define ll long long
#define reg register
#define db double
#define il inline
using namespace std;
void read(int &x){x=0;int f=1;char c=getchar();while(c>'9'||c<'0'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}x*=f;}
void read(ll &x){x=0;int f=1;char c=getchar();while(c>'9'||c<'0'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}x*=f;}
const int N=5e5+10;int blo=803;
int n,m,a[N];
struct node{
int l,r,w;
}z[N];int len,inv[N];
struct abc{
int pos,w,l,r;
}q[N];
int rubid[N],rubw[N],tot;bool lorr[N];
int id[N],R[N];
ll tmp,ans[N];
bool cmp1(node a,node b){if((a.l-1)/blo==(b.l-1)/blo)return a.r>b.r;return a.l<b.l;}
bool cmp2(abc a,abc b){return a.w<b.w;}
il int del(int pos,bool flag){
pos=inv[pos];
if(flag==0){
if(q[pos].l&&q[pos].r)tmp+=abs(q[q[pos].l].pos-q[q[pos].r].pos);
if(q[pos].l)tmp-=abs(q[q[pos].l].pos-q[pos].pos),q[q[pos].l].r=q[pos].r;
if(q[pos].r)tmp-=abs(q[q[pos].r].pos-q[pos].pos),q[q[pos].r].l=q[pos].l;
return 0;
}else{
int re=0;
if(q[pos].l&&q[pos].r)re-=abs(q[q[pos].l].pos-q[q[pos].r].pos);
if(q[pos].l)re+=abs(q[q[pos].l].pos-q[pos].pos);
if(q[pos].r)re+=abs(q[q[pos].r].pos-q[pos].pos);
rubid[++tot]=q[pos].l;lorr[tot]=1;rubw[tot]=q[q[pos].l].r;
rubid[++tot]=q[pos].r;lorr[tot]=0;rubw[tot]=q[q[pos].r].l;
q[q[pos].l].r=q[pos].r;q[q[pos].r].l=q[pos].l;return re;
}
}
il void rebuild(int x){
while(tot>x){
if(lorr[tot]){
q[rubid[tot]].r=rubw[tot];
}else{
q[rubid[tot]].l=rubw[tot];
}
tot--;
}
}
ll ans2[N];
signed main(){
read(n);read(m);
for(int i=1;i<=n;i++)read(a[i]);
for(int i=1;i<=m;i++){
read(z[i].l);read(z[i].r);z[i].w=i;
}
sort(z+1,z+1+m,cmp1);
int L=1;
for(int i=1;i<=n;i++){
id[i]=(i-1)/blo+1;R[id[i]]=i;
}
for(int j=1;j<=n;j++){
q[++len].pos=j;q[len].w=a[j];
}
sort(q+1,q+1+len,cmp2);
for(int i=1;i<=len;i++){
inv[q[i].pos]=i;q[i].l=i-1;q[i].r=(i==len?0:i+1);
if(i!=1)tmp+=abs(q[i].pos-q[i-1].pos);
}
for(int i=1;i<=n/blo+1;i++){
int r=n;
if(i!=1)
for(int j=R[i-2]+1;j<=R[i-1];j++){
del(j,0);
}
int fl=L;
while(L<=m&&id[z[L].l]==i){
while(r>z[L].r){
ans[z[L].w]-=del(r,1);r--;
}
int book=tot;
for(int j=R[i-1]+1;j<z[L].l;j++){
ans2[z[L].w]-=del(j,1);
}
rebuild(book);
L++;
}
for(int i=fl+1;i<L;i++)ans[z[i].w]+=ans[z[i-1].w];for(int i=fl;i<L;i++)ans[z[i].w]+=tmp+ans2[z[i].w];
rebuild(0);
}
for(int i=1;i<=m;i++)printf("%lld\n",ans[i]);
return 0;
}