class Accumulated: def __init__(self, iterable): from itertools import accumulate self.cumsum = list(accumulate(iterable, initial=0)) self.N = len(self.cumsum) - 1 def get(self, idx): assert 0 <= idx < self.N return self.cumsum[idx+1] - self.cumsum[idx] def fold(self, l, r): if l < 0: l = 0 if r > self.N: r = self.N if l >= r: return 0 return self.cumsum[r] - self.cumsum[l] def __getitem__(self, idx: int|slice): if isinstance(idx, int): return self.get(idx) else: l = idx.start r = idx.stop if l is None: l = 0 if r is None: r = self.N return self.fold(l, r) def __iter__(self): for i in range(self.N): yield self.get(i) def __len__(self): return self.N def __repr__(self): return repr(list(self)) sum = fold prod = fold N, Q = map(int, input().split()) A = list(map(int, input().split())) maxbitlen = max(int.bit_length(a) for a in A) segs = [Accumulated([(a>>e)&1 for a in A]) for e in range(maxbitlen)] ans = [] for _ in range(Q): l, r = map(int, input().split()) l -= 1 res = 0 for e in range(maxbitlen): x1 = segs[e][l:r] x0 = (r-l) - x1 res += (x0*x1)<