#include <iostream>;
#include <iomanip>;
#include <vector>;
#include <map>;
#include <stack>;
#include <cstdio>
#include <cstring>;
#include <algorithm>;
using namespace std;
int n,q,l,d,a[200005],duzina[200000],rezultat,mat[1000][200002];
bool poseceno[200005],qw;
int main(){
    cin>>n>>q;
    for(int i=1;i<=n;i++)scanf("%d",&a[i]);
    for(int i=1;i<=q;i++){
        qw=false;
        scanf("%d %d",&l,&d);
        if(poseceno[l]){
            if(d-l>duzina[l]){
                rezultat=mat[l][duzina[l]];
                for(int k=l+duzina[l]+1;k<=d;k++){
                    rezultat=(rezultat&a[k]);
                    duzina[l]++;
                    mat[l][duzina[l]]=rezultat;
                }
                qw=true;
            }
            else cout<<mat [l][d-l]<<endl;
        }
        else{
            if(l<1000){
                poseceno[l]=true;
                rezultat=a[l];
                for(int k=l+1;k<=d;k++){
                    rezultat=(rezultat&a[k]);
                    duzina[l]++;
                    mat[l][duzina[l]]=rezultat;
                }
            }
            else{
                rezultat=a[l];
                for(int k=l+1;k<=d;k++){
                    rezultat=(rezultat&a[k]);
                }
            }
            qw=true;
        }
        if(qw)
        printf("%d\n",rezultat);
    }


return 0;
}