#include <bits/stdc++.h>

using namespace std;

long long bin(long long a){
    long long d,x,p;
    x=a;
    p=0;
    d=0;
    while (x!=0){
        x=x/2;
        p++;
    }
    for (long long i=p-1;i>=0;i--){
        long long f=pow(2,i);
        if (a/f==1)
            d+=pow(10,i);
        a=a%f;
    }
    return d;
}
long long xoor(long long a, long long b){
    long long aa=bin(a);
    long long bb=bin(b);
    long long i=1;
    long long c=0;
    while (aa>=pow(10,i-1) || bb>=pow(10,i-1)){
        long long q=pow(10,i);
        long long aaa=aa%q;
        aaa=10*aaa/q;
        long long bbb=bb%q;
        bbb=10*bbb/q;
        if (aaa==1 && bbb==0){
            long long k=pow(10,i-1);
            c+=k;
        }
        if (aaa==0 && bbb==1){
            long long k=pow(10,i-1);
            c+=k;
        }
        i++;
    }
    return c;
}
long long aand(long long a, long long b){
    long long aa=bin(a);
    long long bb=bin(b);
    long long i=1;
    long long c=0;
    while (aa>=pow(10,i-1) && bb>=pow(10,i-1)){
        long long q=pow(10,i);
        long long aaa=aa%q;
        aaa=10*aaa/q;
        long long bbb=bb%q;
        bbb=10*bbb/q;
        if (aaa==1 && bbb==1){
            long long k=pow(10,i-1);
            c+=k;
        }

        i++;
    }
    return c;
}
bool funkcija (long long a, long long b){
    long long aa=bin(a);
    long long bb=bin(b);
    while (aa!=0 && bb!=0){
        aa/=10;
        bb/=10;
    }
    if (aa==0 && bb==0)
        return true;
    else
        return false;
}
void naciniz(vector<long long> v, long long q1, long long q2){
    long long h=0;
    for (long long l=q1-1;l<q2;l++){
        long long i=l;
        long long j=i;
        long long pom=0;
        while (j<v.size()){
            if (funkcija(v[i],v[j])){
                i=j;
                j++;
                pom++;
            }
            else{
                j++;
            }
        }
        if (h<pom)
            h=pom;
    }
    cout<<h<<endl;;
}
void unos (long long n, vector<long long>& v,map<long long,long long>& m){
    for (long long i=0;i<n;i++){
        long long k;
        cin>>k;
        long long c=0;
        while(k!=0){
            k/=2;
            c++;
        }
        v.push_back(c);


    }
}
void nova (vector<long long> v, long long q1, long long q2){
    long long h=0;
    for (long long i=q1-1;i<q2;i++){
        long long pom=0;
        for (long long j=i;j<q2;j++){
            if (v[j]==v[i])
                pom++;
        }
        if (pom>h)
            h=pom;
    }
    cout<<h<<endl;

}
void novija(vector<long long> v, long long q1, long long q2){
    long long h=0;
    map<long long,long long> m;
    for (long long i=q1-1;i<q2;i++){

        m[v[i]]++;
    }
    for (auto a:m){
        if (h<a.second)
            h=a.second;
    }
    cout<<h<<endl;
}
int main()
{
    long long n,q;
    cin>>n>>q;
    vector<long long> v;
    map<long long,long long> m;
    unos(n,v,m);
    vector<long long> q1,q2;
    for (long long i=0;i<q;i++){
        long long l;
        cin>>l;

        q1.push_back(l);
        long long p;
        cin>>p;
        q2.push_back(p);
    }
    for (long long i=0;i<q;i++){
        novija(v,q1[i],q2[i]);
    }

    return 0;
}
//^&