#include<iostream>
#include<algorithm>

using namespace std;

int n,q,niz[200005],duzina[200005],najduze[200005][25],bitovi[200005][25],pref[200005][25],pref2[200005],l,r,stepeni[25],maxduz,broj,kopija,najveci;
bool tr[25];

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    stepeni[0]=1;
    for(int i=1;i<=20;i++)
    {
        stepeni[i]=stepeni[i-1]*2;
    }
    cin>>n>>q;
    for(int i=1;i<=n;i++)
    {
        cin>>niz[i];
        najveci=max(najveci,niz[i]);
        kopija=niz[i];
        for(int j=1;niz[i];j++)
        {
            if(niz[i]%2) bitovi[i][j]=1;
            else bitovi[i][j]=-1;
            niz[i]/=2;
            duzina[i]=j;
//            cout<<bitovi[i][j]<<" ";
        }
        niz[i]=kopija;
//        cout<<endl;
    }
//    cout<<endl;


    pref2[1]=niz[1];
    for(int i=2;i<=n;i++)
    {
        pref2[i]=pref2[i-1]+niz[i];
    }

    for(int j=1;j<=20;j++)
    {
//        if(bitovi[1][j]==1) pref[1][j]++;
        for(int i=1;i<=n;i++)
        {
//            pref[i][j]=pref[i-1][j];
//            najduze[i][j]=najduze[i-1][j];
            if(bitovi[i][j]==1) pref[i][j]=pref[i-1][j]+1;
            else pref[i][j]=pref[i-1][j];
            if(bitovi[i-1][j]) najduze[i][j]=najduze[i-1][j]+1;
            else najduze[i][j]=najduze[i-1][j];
//            cout<<bitovi[i][j]<<" ";
        }
//        cout<<endl;
    }
    for(int i=1;i<=20;i++)
    {
        for(int j=1;j<=n;j++)
        {
//            cout<<pref[j][i]<<" ";
        }
//        cout<<endl;
    }
//    cout<<endl;
    while(q--)
    {
        cin>>l>>r;
        if(n<=1000)
        {
            broj=niz[l];
            for(int i=l+1;i<=r;i++)
            {
                broj&=niz[i];
            }
        }
        else if(najveci==1)
        {
            if(pref[r]-pref[l-1]==r-l+1) broj=1;
            else broj=0;
            continue;
        }
        maxduz=0;
        broj=0;
        for(int i=1;i<=20;i++)
        {
            if(pref[r][i]-pref[l-1][i]==r-l+1) {tr[i]=1;}
            else tr[i]=0;
            if(najduze[r][i]-najduze[l-1][i]>0) maxduz=i;

        }
//        cout<<maxduz<<endl;
        for(int i=1;i<=maxduz;i++)
        {
            broj+=tr[i]*stepeni[i-1];
        }
        cout<<broj<<endl;
    }

    return 0;
}