#include <bits/stdc++.h>

using namespace std;

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

        i++;
    }
    return c;
}
bool funkcija (int a, int b){
    int aa=bin(a);
    int 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<int> v, int q1, int q2){
    int h=0;
    for (int l=q1-1;l<q2;l++){
        int i=l;
        int j=i;
        int 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 (int n, vector<int>& v,map<int,int>& m){
    for (int i=0;i<n;i++){
        int k;
        cin>>k;
        int c=0;
        while(k!=0){
            k/=2;
            c++;
        }
        v.push_back(c);


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

}
void novija(vector<int> v, int q1, int q2){
    int h=0;
    map<int,int> m;
    for (int 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()
{
    int n,q;
    cin>>n>>q;
    vector<int> v;
    map<int,int> m;
    unos(n,v,m);
    vector<int> q1,q2;
    for (int i=0;i<q;i++){
        int l;
        cin>>l;

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

    return 0;
}
//^&