#include <bits/stdc++.h>
using namespace std;
int n, q, l, r, br, rez, mnm = 1e9, maks = 0;
int a[500005];
int bitovi[1000];
int maksimumi[500005];
//map <int, int> m; ///prvi broj koji je maks bit broja a drugi je broj takvih brojeva ciji je maks bit taj
vector <vector <pair <int, int>>> v(500005);
map <int, int> mapaParova[500005];
map <int, int> mapa;
int funkcija(map <int, int> mapaParova[], int l, int r){
    maks = 0;
    for(auto p : mapaParova[l])
        mapaParova[r][p.first] -= mapaParova[l][p.second];
    for(auto p : mapaParova[r])
        maks = max(mapaParova[r][p.first], maks);
        return maks;
}
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cin >> n >> q;
    /*for(int i = 1; i <= n; i++)
        v[i].first = 2;*/
    for(int i = 1; i <= n; i++){
        cin >> a[i];
        //mnm = min(mnm, a[i]);
        //maks = max(maks, a[i]);
        int bit = log2(a[i]) + 1;
        mapa[bit]++;
        mapaParova[i] = mapa;
       // m[bit]++;
        //maksimumi[i] = bit;
    }
    /*for(auto p: m){
        cout << p.first << " ima " << p.second << " ";
    }*/
    while(q--){
        cin >> l >> r;
        maks = 0;
        //map <int, int> m;
        /*for(int i = l; i <= r; i++){
            int bit = log2(a[i]) + 1;
            m[bit]++;
            //maks = max(maks, bit);
        }*/
        cout << funkcija(mapaParova, l, r) << endl;
//        //br = 1;
//        rez = 0;
//        for(int i = l; i <= r - 1; i++){
//            br = 1;
//            for(int j = i + 1; j <= r; j++){
//                if(a[j] >= a[i] and a[i] != 1)
//                    br++;
//            }
//            rez = max(rez, br);
//        }
//        cout << rez << endl;

    }
    return 0;
}
///daki trazi najvece stepene brojeva koji se najvise puta pojavljuju - roddjo