#include<bits/stdc++.h>
using namespace std;
int n, q, niz[500050];
struct slog
{
    int prvi;
    int drugi;
};
int res, temp1, temp2, a, b;
bool flag;
vector<slog> vektor;
slog par;


void OBRADI()
{
    vektor.clear();
    for(int i=a; i<=b; i++)
    {
        for(int j=i; j<=b; j++)
        {
            par.prvi = i;
            par.drugi = j;
            vektor.push_back(par);
        }
    }

    //for(int i=0; i<vektor.size(); i++)
    //    cout << vektor[i].prvi << " " << vektor[i].drugi << "\n";


    res = 0;
    for(int i=0; i<vektor.size(); i++)
    {
        flag = 1;
        for(int j=vektor[i].prvi; j<=vektor[i].drugi; j++)
        {
            for(int k=j; k<=vektor[i].drugi; k++)
            {
                cout << j << " " << k << "\n";
                //cout << niz[j] << " " << niz[k] << ", " << (niz[j] & niz[k]) << " " << (niz[j]^niz[k]) << "\n";
                if((niz[j] & niz[k]) <= (niz[j]^niz[k]))
                {
                    flag = 0;
                    goto ovde;
                }
            }

            if(flag == 1)
            {
                if(vektor[i].drugi - vektor[i].prvi + 1 > res)
                {
                    res = vektor[i].drugi - vektor[i].prvi + 1;

                    temp1 = vektor[i].prvi;
                    temp2 = vektor[i].drugi;

                }
            }
            //cout << " a\n";
        }
        ovde:
        flag = flag;
        //cout << " b\n";
    }
}

int main()
{
    cin >> n >> q;
    for(int i=1; i<=n; i++)
        cin >> niz[i];
    for(int i=1; i<=q; i++)
    {
        cin >> a >> b;
 //       OBRADI();
        cout << "0\n";
    }
    return 0;
}