#include <bits/stdc++.h>
#define ll long long

using namespace std;

const int MOD = 1e9 + 7;

void solve(){
	
	int n, q;
	cin >> n >> q;
	
	vector<int> a(n + 1);
	vector<int>pre(n + 1);
	set<int> s;
	map<int, set<int>> p_idx_even, p_idx_odd;
	for(int i = 1; i <= n; i++){
		cin >> a[i];
		if(a[i] != 0)s.insert(i);
		pre[i] = pre[i - 1] ^ a[i];
		if(i % 2 == 0)p_idx_even[pre[i]].insert(i);
		else p_idx_odd[pre[i]].insert(i);

	}
	
	while(q--){
		int x, y;
		cin >> x >> y;
		auto g = s.lower_bound(x);
		if(g == s.end() || (*g) > y){
			cout << 0 << "\n";
			continue;
		}
		if((pre[y] ^ pre[x - 1]) != 0){
			cout << -1 << "\n";
		}else{
			if((y - x + 1) % 2 != 0){
				cout << 1 << "\n";
			}else{
				if(a[x] == 0 || a[y] == 0){
					cout << 1 <<"\n";
				}else{
					if((x - 1) % 2 == 0){
						auto g = p_idx_odd[pre[x - 1]].lower_bound(x);
						if(g == p_idx_odd[pre[x - 1]].end() || (*g) > y){
			
							cout <<  -1 << "\n";
						}else{
							cout << 2 << "\n";
						}
					}else{
						auto g = p_idx_even[pre[x - 1]].lower_bound(x);
						if(g == p_idx_even[pre[x - 1]].end() || (*g) > y){
							cout << -1 << "\n";
						}else{
							cout << 2 << "\n";
						}
					}
				}
			}
		}
	}
	
}

int main(){
	ios_base::sync_with_stdio(false);
	cin.tie(nullptr);
	
	int t = 1;
	// cin >> t;
	
	for(int i = 1; i <= t; i++){
		solve();
	}
	return 0;
}