#include<cstdio>
using namespace std;
int n,q,a[200005],res,cnta,pref_sum[200005],suma[200005][25],dvojke[25],num;
struct ss{
    int l,r;
} upit[200005];

void Subtask1() {
    for (int i=1;i<=q;i++) {
        res=a[upit[i].l];
        for (int j=upit[i].l+1;j<=upit[i].r;j++) res=(res&a[j]);

        printf("%d\n", res);
    }
}

void Subtask2() {
    for (int i=1;i<=n;i++) pref_sum[i]=pref_sum[i-1]+a[i];

    for (int i=1;i<=q;i++) {
        if (pref_sum[upit[i].r] - pref_sum[upit[i].l] == upit[i].r - upit[i].l) printf("1\n");
        else printf("0\n");
    }
}

void Subtask3() {
    dvojke[0]=1;
    for (int i=1;i<=20;i++) dvojke[i]=dvojke[i-1]*2;

    for (int i=1;i<=n;i++) {
        int temp=a[i];
        for (int j=1;j<=20;j++) {
            if (temp%2==1) suma[i][j]=suma[i-1][j]+1;
            else suma[i][j]=suma[i-1][j];

            temp/=2;
        }
    }

//    for (int i=1;i<=n;i++) {
//        for (int j=1;j<=20;j++) printf("%d ", suma[i][j]);
//        printf("\n");
//    }
//    return ;

    for (int i=1;i<=q;i++) {
        res=0;
        num=1;
        for (int j=1;j<=20;j++) {
//            printf("i:%d  j:%d  sr:%d  sl:%d  r:%d  l:%d\n", i, j, suma[ upit[i].r ][j], suma[ upit[i].l ][j], upit[i].r, upit[i].l);
            if (suma[ upit[i].r ][j] - suma[ upit[i].l - 1 ][j] == upit[i].r - upit[i].l + 1 &&  suma[ upit[i].l ][j]!=0) res+=num;

            num*=2;
        }

        printf("%d\n", res);
    }
}

int main() {
    scanf("%d %d", &n, &q);
    for (int i=1;i<=n;i++) {
        scanf("%d", &a[i]);
        if (a[i]<=1) cnta++;
    }
    for (int i=1;i<=q;i++) scanf("%d %d", &upit[i].l, &upit[i].r);

//    if (n<=1000 && q<=1000) Subtask1();
//    else if (cnta==n) Subtask2();
//    else Subtask3();
    Subtask3();

    return 0;
}
/*
5 4
1 5 4 3 2
1 3
4 5
2 5
2 3
*/
/*
7 5
5 9 3 2 10 11 7
1 3
6 7
5 7
3 4
2 4
*/