#include <fstream>
#include <vector>
#define MAX 250003
using namespace std;
ifstream fin ("cuburi2.in");
ofstream fout ("cuburi2.out");
long long v[MAX],n;
vector<long long> s1(MAX, 0);
vector<long long> s2(MAX, 0);
void suma (long long n) {
long long i;
for (i=1; i<=n; i++) {
s1[i]=s1[i-1]+v[i];
s2[i]=s2[i-1]+v[i]*i;
}
}
long long suma1(long long st, long long dr) {
if (st>dr) {
return 0;
}
return s1[dr]-s1[st-1];
}
long long suma2(long long st, long long dr) {
if (st>dr) {
return 0;
}
return s2[dr]-s2[st-1];
}
long long cb (long long x, long long y) {
long long k=(suma1(x, y)+1)/2;
long long st=x, dr=y, poz=x;
while (st<=dr) {
long long mij=(dr+st)/2;
if (suma1(x, mij)>=k) {
poz=mij;
dr=mij-1;
} else {
st=mij+1;
}
}
return poz;
}
long long solve(long long x, long long y, long long poz) {
long long st=poz*suma1(x, poz-1)-suma2(x, poz-1);
long long dr=suma2(poz+1, y)-poz*suma1(poz+1, y);
return st+dr;
}
int main() {
long long m,i,x,y,poz,k;
fin>>n>>m;
for (i=1; i<=n; i++) {
fin>>v[i];
}
suma(n);
for (i=0; i<m; i++) {
fin>>x>>y;
poz=cb(x, y);
k=solve(x, y, poz);
fout<<poz<<" "<<k<<endl;
}
return 0;
}