#include <bits/stdc++.h>
using namespace std;
int f[1000005][20],a[1000005],n,m,ans2;
inline int read(){
int x = 0,f = 1;
char ch = getchar();
while (ch < '0' || ch > '9'){
if (ch == '-') f = -1;
ch = getchar();
}
while (ch >= '0' && ch <= '9') x = x * 10 + ch - '0',ch = getchar();
return x * f;
}
void write(int x){
if (x < 0) putchar('-'),x = -x;
if (x > 9) write(x / 10);
putchar(x % 10 + '0');
}
int main(){
n = read();
m = read();
for (int i = 1;i <= n;i++){
a[i] = read();
f[i][0] = a[i];
}
for (int i = 1;i <= 20;i++){
int tmp = pow(2,i);
for (int j = 1;j + tmp <= n + 1;j++) f[j][i] = f[j][i - 1] * f[j + (int)pow(2,i - 1)][i - 1] % 1145141;
}
for (int i = 1;i <= m;i++){
int l,r;
l = read();
r = read();
int len = r - l + 1,ans = 1,k = 0;
while (len){
if (len % 2 == 1){
ans = ans * f[l][k] % 1145141;
l += pow(2,k);
}
k++;
len /= 2;
}
ans2 ^= ans;
}
write(ans2);
return 0;
}
感谢大佬指教