#include <bits/stdc++.h>
using namespace std;
namespace io {
template<typename T>inline void read(T &x) {
char ch, f = 0; x = 0;
while (!isdigit(ch = getchar())) f |= ch == '-';
while (isdigit(ch)) x = (x << 1) + (x << 3) + (ch ^ 48), ch = getchar();
x = f? -x: x;
}
char ch[40];
template<typename T>inline void write(T x) {
(x < 0) && (putchar('-'), x = -x);
x || putchar('0');
int i = 0;
while (x) ch[i++] = x % 10 ^ 48, x /= 10;
while (i) putchar(ch[--i]);
}
}
#define rd io::read
#define wt io::write
const int maxN = 1e5 + 5;
typedef long long ll;
int dcnt[maxN], bel[maxN];
int n, m, a[maxN], b[maxN], len;
ll ans, Ans[maxN], bkv;
int dl;
struct Node {
int l, r, id;
bool operator< (const Node &a) { return bel[l] == bel[a.l] ? r < a.r : l < a.l; }
}qu[maxN];
inline void save(int l) {
dl = l; bkv = ans;
}
inline void roll_back(int &l) {
ans = bkv;
while (l < dl) --dcnt[a[l++]];
}
inline ll query(int x, int y) {
ll mx = 0;
for (int i = x; i <= y; ++i)
mx = max(1LL * (++dcnt[a[i]]) * b[a[i]], mx);
for (int i = x; i <= y; ++i)
--dcnt[a[i]];
return mx;
}
inline void add(int x) { ans = max(ans, 1LL * (++dcnt[a[x]]) * b[a[x]]); }
int main() {
#ifdef LOCAL
clock_t startTime = clock();
freopen("1.in", "r", stdin);
freopen("1.out", "w", stdout);
#endif
rd(n); rd(m); len = sqrt(n);
for (int i = 1; i <= n; ++i) {
rd(a[i]); bel[i] = (i + len - 1) / len;
b[i] = a[i];
}
sort(b + 1, b + n + 1);
int ln = unique(b + 1, b + 1 + n) - b - 1;
for (int i = 1; i <= n; ++i)
a[i] = lower_bound(b + 1, b + ln + 1, a[i]) - b;
for (int i = 1; i <= m; ++i) {
rd(qu[i].l); rd(qu[i].r); qu[i].id = i;
}
sort(qu + 1, qu + m + 1);
int l = len, r = len - 1;
for (int i = 1; i <= m; ++i) {
if (bel[qu[i].l] == bel[qu[i].r]) {
Ans[qu[i].id] = query(qu[i].l, qu[i].r);
} else {
while (r < qu[i].r) add(++r);
save(l);
while (l > qu[i].l) add(--l);
Ans[qu[i].id] = ans;
if (bel[qu[i + 1].l] != bel[qu[i].l]) {
memset(dcnt, 0, sizeof(dcnt));
l = (bel[qu[i].l] + 1) * len; r = l - 1; ans = 0;
}
else roll_back(l);
}
}
for (int i = 1; i <= m; ++i) {
wt(Ans[i]); putchar('\n');
}
#ifdef LOCAL
cerr << "Times: " << clock() - startTime << "ms" << endl;
#endif
return 0;
}