#include <vector>
#include <iostream>
#include <stack>
using namespace std;

int main(){



    int n, m;
    cin >> n >> m;

    vector<int> t(2 * n, -1);

    for(int i = 0; i < n; i++)
        cin >> t[n + i];

    for(int i = n - 1; i > 0; i--)
        t[i] = t[i * 2] & t[i * 2 + 1];

    int x, y, res;

    stack<int> s;

    for(int i = 0; i < m; i++){
        cin >> x >> y;

        x = n + x - 1;
        y = n + y - 1;

        while(x < y){

            if(x % 2 == 1){
                s.push(t[x]);
                x++;
            }

            if(y % 2 == 0){
                s.push(t[y]);
                y--;
            }

            x /= 2;
            y /= 2;

        }

        if(x == y)
            s.push(t[x]);

        res = s.top();

        s.pop();

        while(!s.empty()){
            res = res & s.top();
            s.pop();
        }

        cout << res << endl;

    }

    return 0;
}