#include <iostream>
#include <vector>

using namespace std;

bool DaLiJeDobar(vector<bool> broj1, vector<bool> broj2, int duzina)
{
    for (int i = 0; i < duzina; i++)
    {
        if(broj1[i]&broj2[i] == false && broj1[i]^broj2[i] == true)
        {
            return false;
        }
        else if(broj1[i]&broj2[i] == true && broj1[i]^broj2[i] == false)
        {
            return true;
        }
        else if(i == duzina-1)
        {
            return false;
        }
    }

    return true;
}

int main()
{
    //cout << DaLiJeDobar({true,true,false},{true,false,true},3);

    int n,q;
    cin >> n >> q;
    int nizu[n];
    int maks_broj = 0;
    for (int i = 0; i < n; i++)
    {
        cin >> nizu[i];
        if(nizu[i] > maks_broj)
        {
            maks_broj = nizu[i];
        }
    }


    int brojac = 0;
    if(maks_broj == 0){
        brojac = 1;
    }
    while(maks_broj > 0)
    {
        maks_broj /= 2;
        brojac++;
    }

    vector<vector<bool>> niz;

    for (int i = 0; i < n; i++)
    {
        int broj = nizu[i];

        for(int j = 0; j < brojac; j++)
        {
            niz.push_back({});
            niz[i].push_back(false);
        }

        int b = brojac-1;
        while(broj > 0)
        {
            if(broj%2 == 1)
            {
                niz[i][b] = true;
            }
            b--;
            broj /= 2;
        }
    }
    int resenja[q];

    for (int i = 0; i < q; i++)
    {
        int i1,i2;
        cin >> i1 >> i2;

        vector<vector<bool>> zaProveru;
        for (int j = i1-1; j <= i2 - 1; j++)
        {
            bool daLiJePrisutan = false;
            bool ab = true;
            for (int m = 0; m < zaProveru.size() && ab;m++)
            {
                for(int s = 0; s < brojac; s++)
                {
                    if (niz[j][s] != zaProveru[m][s])
                    {
                        //cout << j << m << endl;
                        //cout << niz[j][s] << 'n' << endl;
                        break;
                    }
                    else if (s == brojac-1)
                    {
                        daLiJePrisutan = true;
                        ab = false;
                    }
                }

            }

            if(!daLiJePrisutan)
            {
                zaProveru.push_back(niz[j]);
            }
        }


        int brojac2 = 0;
        for (int j = 0; j < zaProveru.size() - 1; j++)
        {
            for (int k = j+1; k < zaProveru.size(); k++)
            {
                if (DaLiJeDobar(zaProveru[j], zaProveru[k], brojac))
                {
                    brojac2++;
                }
            }
        }

        resenja[i] = brojac2;
    }

    for (int i = 0; i < q; i++)
    {
        cout << resenja[i] << endl;
    }
}