#include <iostream>;
#include <iomanip>;
#include <vector>;
#include <map>;
#include <stack>;
#include <cstdio>
#include <cstring>;
#include <algorithm>;
using namespace std;
int n,q,l,proslo,d,a[200005],resenje[200000],br,rezultat;
bool niz[200000];
bool qw;
struct slog{int l;int d; int poz;};
slog qwe[200000];
bool cmp(slog a,slog b){
    return a.l<b.l;
}
int main(){
    cin>>n>>q;
    for(int i=1;i<=n;i++){
        scanf("%d",&a[i]);
        if(a[i]==0){
            niz[i]=true;
        }
        if(a[i]>1)qw=true;
    }
    if(qw){
    for(int i=1;i<=q;i++){
        scanf("%d %d",&l,&d);
        rezultat=a[l];
        for(int k=l+1;k<=d;k++){
            rezultat=(rezultat&a[k]);
        }
        printf("%d\n",rezultat);
    }
    }
    else{
        for(int i=1;i<=q;i++){
            scanf("%d %d",&qwe[i].l,&qwe[i].d);
        }
        sort(qwe+1,qwe+1+q,cmp);
        for(int i=1;i<=q;i++){
            qw=false;
            if(proslo<qwe[i].d and proslo>qwe[i].l)resenje[qwe[i].poz]=0;
            else{
                for(int i=qwe[i].l;i<=qwe[i].d;i++){
                    if(niz[i]){
                        proslo=i;
                        resenje[qwe[i].poz]=0;
                        qw=true;
                        break;
                    }
                }
            if(!qw)
            resenje[qwe[i].poz]=1;
            }
        }
        for(int i=1;i<=q;i++){
            printf("%d\n",resenje[i]);
        }
    }

return 0;
}