#include<bits/stdc++.h>
using namespace std;
int n, m , x, L, R, maks;
int step2 [35];
int dirk[35];
struct s{
    int step2manji;
    int br;
};
s O[500005];
int main (){
    step2[0]=1;
    for(int i = 1 ; i<= 30;i++){
            step2[i]=step2[i-1]*2;
            cout<<"stepen"<<i<<":"<<step2[i]<<endl;
    }

    cin>>n>>m;
    for(int i = 1; i<= n; i++){
            cin>>O[i].br;
            int j=1;
//            for(int j=1; j<=30; j++){
//                if(O[i].br<step2[j]){
//                    O[i].step2manji=j-1;
//                    j=31;
//                }
//            }
    }

    for(int i=1 ; i<= n;i++){
        cout<<"broj :"<< O[i].br<<"  nizistep2 :"<<O[i].step2manji<<endl;
    }
    for(int i = 1; i<= m; i++){
        cin>>L>>R;
        maks=0;
        for(int j=1 ; j<=32;j++){
            dirk[j]=0;
        }
        for(int j=L; j<=R; j++){
            dirk[O[j].step2manji]++;
//            maks=max(maks,dirk[O[j].step2manji]);
        }

        for(int j=1 ; j<=32;j++){
            maks=max(maks,dirk[j]);
            dirk[j]=0;
        }

        cout<<maks<<endl;

//        for(int j=1 ; j<=32;j++){
//            cout<<dirk[j]<<" ";
//        }
    }

//    int k=100;
//
//
//    int N= 100;
//    while (N>0){
//    cin>>n>>m;
//    x= n & m;
//    cout<<"and :" <<x<<endl;
//
//    x= n ^m;
//    cout<<"xor :" <<x<<endl;
//    N--;
//    }
//
    return 0;
}