#include<bits/stdc++.h>
using namespace std;
struct dr {
int id, num;
} a[100005];
struct que {
int l, r, id;
} q[100005];
int n, m, w[100005], d[100005], tot, sq, belong[100005], rig[10005],ans[100005], l, r,bc, k,res,cnt[100005];
bool px(dr x, dr y) {
return x.num < y.num;
}
bool cmp(que x, que y) {
if (belong[x.l] != belong[y.l]) return belong[x.l] < belong[y.l];
return x.r < y.r;
}
signed main() {
cin >> n >> m;
for (int i = 1; i <= n; i++) cin >> a[i].num, a[i].id = i;
sort(a + 1, a + n + 1, px);
for (int i = 1; i <= n; i++) {
if (a[i].num != a[i - 1].num) {
d[++tot] = a[i].num;
}
w[a[i].id] = tot;
}
sq = sqrt(n);
for (int i = 1; i <= n; i++) {
belong[i] = (i - 1) / sq + 1;
if (belong[i] != belong[i - 1] && belong[i - 1] != 0) rig[belong[i - 1]] = i - 1;
}
rig[belong[n]] = 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, cmp);
for (int i = 1; i <= m; i++) {
if (belong[q[i].l] != k) {
for(int j=rig[k];j<=r;j++) cnt[w[j]]--;
k=belong[q[i].l];
l=rig[k],r=rig[k];
cnt[w[l]]++;
res=d[w[l]];
}
while(r<q[i].r){
cnt[w[++r]]++;
res=max(res,d[w[r]]*cnt[w[r]]);
}
bc=res;
while(r>q[i].r){
cnt[w[r--]]--;
}
while(l>q[i].l){
cnt[w[--l]]++;
bc=max(bc,d[w[l]]*cnt[w[l]]);
}
for(int j=l;j<rig[k];j++) cnt[w[j]]--;
l=rig[k];
ans[q[i].id]=bc;
}
for(int i=1;i<=m;i++) cout<<ans[i]<<"\n";
return 0;
}