#include <bits/stdc++.h>
#define endl "\n"
using namespace std;
typedef long long LL;
const LL N = 2e5 + 10, INF = 0x3f3f3f3f, mod = 1e9 + 7;
LL a[N], s[N], sum[N];
int main()
{
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
// LL t;
// cin >> t;
// while (t--)
// {
LL n, k;
cin >> n >> k;
map<int, set<int>> mp[2];
for (LL i = 1; i <= n; i++)
{
cin >> a[i];
s[i] = (s[i - 1] ^ a[i]);
sum[i] = sum[i - 1] + a[i];
if (i & 1) mp[1][s[i]].insert(i);
else mp[0][s[i]].insert(i);
}
for (LL i = 1; i <= k; i++)
{
LL l, r;
cin >> l >> r;
LL res = (s[r] ^ s[l - 1]);
if (res != 0)
{
cout << -1;
}
else
{
if (r - l + 1 == 2)
{
if (a[l] || a[r]) cout << -1;
else cout << 0;
}
else
{
if (sum[r] - sum[l - 1] == 0) cout << 0;
else
{
// cout << "*";
if ((r - l + 1) & 1) cout << 1;
else
{
if (!a[l] || !a[r]) cout << 1;
else
{
int k = (l & 1);
if (mp[k].count(s[l - 1]))
{
auto pos = mp[k][s[l - 1]].upper_bound(l);
// cout << pos - mp[k].begin() << " ";
if (pos == mp[k][s[l - 1]].end()) cout << -1;
else if (*pos < r) cout << 2;
else cout << -1;
}
else cout << -1;
}
}
}
}
}
cout << endl;
}
// cout << endl;
// }
return 0;
}
448. Find All Numbers Disappeared in an Array | 1155. Number of Dice Rolls With Target Sum |
415. Add Strings | 22. Generate Parentheses |
13. Roman to Integer | 2. Add Two Numbers |
515. Find Largest Value in Each Tree Row | 345. Reverse Vowels of a String |
628. Maximum Product of Three Numbers | 1526A - Mean Inequality |
1526B - I Hate 1111 | 1881. Maximum Value after Insertion |
237. Delete Node in a Linked List | 27. Remove Element |
39. Combination Sum | 378. Kth Smallest Element in a Sorted Matrix |
162. Find Peak Element | 1529A - Eshag Loves Big Arrays |
19. Remove Nth Node From End of List | 925. Long Pressed Name |
1051. Height Checker | 695. Max Area of Island |
402. Remove K Digits | 97. Interleaving String |
543. Diameter of Binary Tree | 124. Binary Tree Maximum Path Sum |
1465. Maximum Area of a Piece of Cake After Horizontal and Vertical Cuts | 501A - Contest |
160A- Twins | 752. Open the Lock |