#include <iostream>
#include<vector>
#include<algorithm>
using namespace std;
vector<int> A;
vector<vector<int>> B;
int stepeni(int N)
{
    int max = 0;
    for (int i = 0; i < N; i++)
    {
        int k = 0, e = 1;
        while (e <= A[i])
        {
            if (e * e <= A[i]) { k *= 2; e *= e; }
            e *= 2;
            k++;
        }
        A[i] = k;
        if (k > max)max = k;
    }
    return max;
}
int main()
{
    int N, Q;
    cin >> N;
    cin >> Q;
    A.resize(N);
    for (int i = 0; i < N; i++)
    {
        cin >> A[i];
    }
    int max = stepeni(N);
    B.resize(N);
    for (int i = 0; i < N; i++)
    {
        B[i].resize(max + 1);
        if (i > 0)B[i] = B[i - 1];
        B[i][A[i]]++;
    }

    for (int i = 0; i < Q; i++)
    {
        int resenje = 0;
        int pocetak, kraj;
        cin >> pocetak;
        cin >> kraj;
        pocetak--; kraj--;
        for (int j = 0; j <= max; j++)
        {
            if (B[kraj][j] != 0) 
            {
                int brpojavljivanja = B[kraj][j];
                if (pocetak > 0)brpojavljivanja = B[kraj][j] - B[pocetak - 1][j];
                if (brpojavljivanja > resenje)resenje = brpojavljivanja;
            }
        }
        cout << resenje << "\n";
    }
    return 0;

}