#include using namespace std; using ll = long long; #ifdef LOCAL #include #else #define debug(...) #endif int main() { cin.tie(nullptr); ios::sync_with_stdio(false); cout << fixed << setprecision(20); int N, Q; cin >> N >> Q; vector A(N); for (int i = 0; i < N; i++) cin >> A[i]; // 各 i 桁ごとの 1, 0 の個数の累積和 vector one(30, vector(N + 1)); vector zero(30, vector(N + 1)); for (int i = 0; i < N; i++) { for (int d = 0; d < 30; d++) { one[d][i + 1] = one[d][i] + ((A[i] >> d) & 1); zero[d][i + 1] = zero[d][i] + !((A[i] >> d) & 1); } } while (Q--) { int L, R; cin >> L >> R, L--; ll ans = 0; for (int d = 0; d < 30; d++) { ans += (1LL << d) * (one[d][R] - one[d][L]) * (zero[d][R] - zero[d][L]); } cout << ans << '\n'; } }