#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1005;
unsigned int aa[N], bb[N], cc[N];
unsigned int andv[N][N], orv[N][N], gcdv[N][N];
unsigned int val[N][N];
unsigned int ps[N][N];
int n, m;
unsigned int gcd(unsigned int x, unsigned int y) {
while (y) {
unsigned int t = x % y;
x = y;
y = t;
}
return x;
}
int main() {
freopen("shijian.in","r",stdin);
freopen("shijian.out","w",stdout);
cin >> n >> m;
for (int i = 1; i <= n; ++i) cin >> aa[i];
for (int i = 1; i <= n; ++i) cin >> bb[i];
for (int i = 1; i <= n; ++i) cin >> cc[i];
for (int l = 1; l <= n; ++l) {
andv[l][l] = aa[l];
orv[l][l] = bb[l];
gcdv[l][l] = cc[l];
for (int r = l+1; r <= n; ++r) {
andv[l][r] = andv[l][r-1] & aa[r];
orv[l][r] = orv[l][r-1] | bb[r];
gcdv[l][r] = gcd(gcdv[l][r-1], cc[r]);
}
}
for (int l = 1; l <= n; ++l) {
for (int r = l; r <= n; ++r) {
val[l][r] = andv[l][r] * orv[l][r] * gcdv[l][r];
}
}
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= n; ++j) {
ps[i][j] = val[i][j] + ps[i-1][j] + ps[i][j-1] - ps[i-1][j-1];
}
}
while (m--) {
int L, R;
cin >> L >> R;
unsigned int ans = 0;
for (int lp = L; lp <= R; ++lp) {
ans += ps[lp][R] - ps[lp][lp-1] - ps[lp-1][R] + ps[lp-1][lp-1];
}
cout << ans << endl;
}
return 0;
}