#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int niz[500001];
int prefiks[32][500001];
int odgovori[500000];

int najvisiBit(int broj) {
    int bit = 0;
    while (broj > 1) {
        broj >>= 1;
        bit++;
    }
    return bit;
}

int main() {
    int duzinaNiza, brojUpita;
    scanf("%d %d", &duzinaNiza, &brojUpita);

    for (int i = 1; i <= duzinaNiza; i++) {
        scanf("%d", &niz[i]);
        int bit = najvisiBit(niz[i]);
        for (int b = 0; b < MAXB; b++) {
            prefiks[b][i] = prefiks[b][i-1];
        }
        prefiks[bit][i]++;
    }

    for (int q = 0; q < brojUpita; q++) {
        int levo, desno;
        scanf("%d %d", &levo, &desno);
        int maksimum = 0;
        for (int b = 0; b < MAXB; b++) {
            int brojPojavljivanja = prefiks[b][desno] - prefiks[b][levo-1];
            if (brojPojavljivanja > maksimum) maksimum = brojPojavljivanja;
        }
        odgovori[q] = maksimum;
    }

    for (int q = 0; q < brojUpita; q++) {
        printf("%d\n", odgovori[q]);
    }

    return 0;
}