#include <iostream>
#include <vector>
struct brojevi
{
	long long brJedinica,brNula;
};
std::vector<std::vector<brojevi>> bitovi;

void ucitajISpremi(int n)
{
	unsigned int ulaz;
	for(int i = 1;i <= n;i++)
	{
		scanf("%d",&ulaz);
		for(int j = 0;j < 32;j++)
		{
			unsigned int trBit = ulaz & (1 << j);
			bitovi[j][i].brJedinica = bitovi[j][i-1].brJedinica;
			bitovi[j][i].brNula = bitovi[j][i-1].brNula;
			if(trBit >= 1)
			{
				bitovi[j][i].brJedinica++;
			}
			else
			{
				bitovi[j][i].brNula++;
			}

		}

	}
}
int main()
{
	int n, upita;
	scanf("%d %d",&n,&upita);
	bitovi.resize(20);
	for(int i = 0;i < 32;i++)
	{
		bitovi[i].resize(n+1);
	}
	ucitajISpremi(n);
	int l,r;
	for(int i = 0;i < upita;i++)
	{
		scanf("%d %d",&l,&r);
		unsigned int konstRez = 0;
		for(int j = 0;j < 32;j++)
		{
			brojevi lBrojevi = bitovi[j][l-1],dBrojevi = bitovi[j][r];	
			long long brJedinica = dBrojevi.brJedinica - lBrojevi.brJedinica;
			long long brNula = dBrojevi.brNula - lBrojevi.brNula;
			int trBit = 1;
			if(brNula > 0)
			{
				trBit = 0;
			}
			konstRez |= (trBit<<j);
		}
		printf("%d\n",konstRez);
	}
	return 0;	
}