#include #include #include #include static inline constexpr std::vector> prepare(const uint_fast32_t N, const std::vector& A) noexcept { std::vector> csum_count(N + 1); for (uint_fast32_t i = 0; i != N; ++i) for (uint_fast32_t j = 0; j != 26; ++j) csum_count[i + 1][j] = csum_count[i][j] + ((A[i] >> j) & 1); return csum_count; } static inline constexpr std::vector solve(const uint_fast32_t Q, const std::vector& L, const std::vector& R, const std::vector>& csum_count) noexcept { std::vector ans(Q, 0); for (uint_fast32_t i = 0; i != Q; ++i) for (uint_fast32_t j = 0; j != 26; ++j) { const uint_fast32_t count[2] = { (R[i] + 1 - L[i]) - (csum_count[R[i]][j] - csum_count[L[i] - 1][j]), csum_count[R[i]][j] - csum_count[L[i] - 1][j] }; ans[i] += (static_cast(count[0]) * count[1]) << j; } return ans; } static inline void output(const uint_fast32_t Q, const std::vector& ans) noexcept { for (uint_fast32_t i = 0; i != Q; ++i) std::cout << ans[i] << '\n'; } int main() { std::cin.tie(nullptr); std::ios::sync_with_stdio(false); uint_fast32_t N, Q, i; std::cin >> N >> Q; std::vector A(N), L(Q), R(Q); for (i = 0; i != N; ++i) std::cin >> A[i]; for (i = 0; i != Q; ++i) std::cin >> L[i] >> R[i]; output(Q, solve(Q, L, R, prepare(N, A))); return 0; }