#include <bits/stdc++.h>

using namespace std;
const long long N = 2e5 + 10;

int n,q;
int niz[N];
int matrica[21][N];
int posledni=0;
int res[N];
void rastavi(int broj, int poz)
{
    int brojac=1;
    while(broj>0)
    {
        int a=broj%2;
        matrica[brojac][poz]=a;
        brojac++;
        broj/=2;
    }
    posledni=max(posledni,brojac-1);
}
vector  <int> nule[25];

int main()
{

   scanf("%d%d", &n, &q);
   for(int i=1;i<=n;i++)
   {
       scanf("%d", &niz[i]);
       rastavi(niz[i],i);
   }
   for(int i=1;i<=21;i++)nule[i].empty();
   for(int i=1;i<=21;i++)
   {

       for(int j=1;j<=n;j++)
       {

           if(!matrica[i][j])nule[i].push_back(j);
       }

   }
   for(int i=1;i<=21;i++)
   {
       sort(nule[i].begin(),nule[i].end());
   }
   for(int i=1;i<=q;i++)
   {
       int l,r,res1=0;
       scanf("%d%d", &l, &r);

       for(int j=21;j>=1;j--)
       {
       std::vector <int> :: iterator poz=lower_bound(nule[j].begin(),nule[j].end(),l);

       if(poz==nule[j].end() &&(!nule[j].empty())){ res1=2*res1+1;}
       else
       {
           if(poz==nule[j].end())res1=res1*2;else
           {

           int g=(*poz);

           if(g>r)res1=2*res1+1;else
            res1=2*res1;
           }
       }

       }
       res[i]=res1;
   }
    for(int i=1;i<=q;i++)printf("%d\n", res[i]);
   return 0;

}