#include <iostream>
#include <cstring>

using namespace std;

int step(int a) //dva na a
{
    int pom=1;
    for(int i=0; i<a; i++)
    {
        pom*=2;
    }
    return pom;
}

int niz[200000][20]={{0},{0}};
int pniz[200000]={0};

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);

    int n, q, br, cn, b1=0;
    cin>>n>>q;
    bool dva=true;
    for(int i=0; i<n; i++)
    {
        cin>>br;
        cn=0;
        if(br>1)
        {
            dva=false;
        }
        if(br==1)
        {
            b1++;
        }
        pniz[i]=b1;
        while(br>0)
        {
            if(br%2==1)
            {
                niz[i+1][cn]=1;
                br=br/2;
                cn++;
            }
            else{
                niz[i+1][cn]=0;
                br=br/2;
                cn++;
            }
        }
    }
    int a, b, zbir=0;

    int res[20];
    for(int i=0; i<20; i++)
    {
        res[i]=1;
    }
    for(int i=0; i<q; i++)
    {
        cin>>a>>b;
        zbir=0;
        if(dva==true)
        {
            if(b-a==pniz[b-1]-pniz[a-1])
            {
                zbir=1;
            }
            else{
                zbir=0;
            }
        }
        else{
         for(int i=0; i<20; i++)
         {
             res[i]=1;
         }
         for(int j=a; j<=b; j++)
         {
            for(int tm=0; tm<20; tm++)
            {
                if(niz[j][tm]==0)
                {
                    res[tm]=0;
                }
            }
         }
         for(int j=0; j<20; j++)
         {
            if(res[j]==1)
            {
                zbir+=step(j);
            }
         }
        }
        cout<<zbir<<endl;

    }
    return 0;
}