#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef vector<int> vi;

#define N 500007

int prefix[33][N] = {};

int main() {
    int n,q;
    cin >> n >> q;

    vi a(n);
    vector<pair<int,int>> upiti(q);

    for (int i = 0; i < n; i++) {
        cin >> a[i];
    }
    for (int i = 0; i < q; i++) {
        cin >> upiti[i].first >> upiti[i].second;
    }

    for (int i = 0; i < n; i++) {
        for (int j= 0; j < 33; j++) {
            prefix[j][i+1] = prefix[j][i] + (__builtin_clz(a[i]) == j);
        }
    }
     for (int i = 0; i < q; i++) {
            int maks = 0;
        for (int j= 0; j < 33; j++) {
            maks = max(maks, prefix[j][upiti[i].second]-prefix[j][upiti[i].first] );
        }
     cout << maks << '\n';
    }
    /*
    for (int i = 0; i < n; i++) {
    for (int j= 0; j < 33; j++) {
        cout << prefix[j][i+1] << ' ';
    }
    cout << '\n';
    }
    */
}