#include<stdio.h>
#define N 2500
unsigned long long S[N],ST[N],DR[N],min;
int V[N],n,m,x1,y1,p;
unsigned long long Rez(int x,int y,int dir){
unsigned long long r1=0;
if(dir){if(y) r1 = ST[y] - ST[x-1] - ( y - x + 1 )*S[ x - 1];}
else if(x<=y1) r1 = DR[x] - DR[y+1] - ( y - x + 1 ) * ( S[n] - S[y] ) ;
return r1;
}
void Binary_Search(int st,int dr){
int mj;
while(st<=dr){
mj = (st+dr)>>1;
if( Rez(x1,mj-1,1)+Rez(mj+1,y1,0) < min || min == -1 ){
min = Rez(x1,mj-1,1)+Rez(mj+1,y1,0);
p = mj;
}
if(Rez(x1,mj-2,1)+Rez(mj,y1,0) < Rez(x1,mj,1)+Rez(mj+2,y1,0))
dr = mj - 1;
else st = mj + 1;
}
}
int main(){
int i;
freopen("cuburi2.in","rt",stdin);
freopen("cuburi2.out","wt",stdout);
scanf("%d %d",&n,&m);
for(i=1;i<=n;i++){
scanf("%d ",&V[i]);
S[i] = S[i-1] + V[i];
ST[i] = ST[i-1] + S[i];
}
for(i=n;i>=1;i--) DR[i] = DR[i+1] + S[n] - S[i-1];
for(;m--;){
scanf("%d %d",&x1,&y1);
min=-1;
Binary_Search(x1,y1);
printf("%d %lld\n",p,min);
}
return 0;
}