class Mo: def __init__(self, data, queries): self.data = data self.n = len(data) self.queries = queries def solve(self, add_func, delete_func, ans_init): from math import sqrt, ceil ans = ans_init q = len(self.queries) n = self.n queries = self.queries bucket_size = ceil(sqrt(3) * n / (sqrt(2) * sqrt(q))) order = [0] * q for idx, (L, R, _) in enumerate(queries): order[idx] = ((L // bucket_size) << 40) + (((R if (L // bucket_size) & 1 else -R)) << 20) + idx order.sort() mask = (1 << 20)-1 res = [0]*q l = 0 r = 0 a_add = add_func a_del = delete_func for lr in order: i = lr & mask L, R, K = queries[i] while r < R: ans = a_add(r, ans) r += 1 while r > R: r -= 1 ans = a_del(r, ans) while l < L: ans = a_del(l, ans) l += 1 while l > L: l -= 1 ans = a_add(l, ans) print(l,r,d) res[i] = d[K] return res from collections import defaultdict N,Q = list(map(int,input().split())) A = list(map(int,input().split())) query = [] for _ in range(Q): l,r,k = list(map(int,input().split())) query.append((l-1,r,k)) used = sorted(set([k for l,r,k in query])) d = defaultdict(int) def add_func(x, ans): for i in used: if(i > A[x]):break if(A[x]%i != 0):continue d[i] += 1 return ans def delete_func(x, ans): for i in used: if(i > A[x]):break if(A[x]%i != 0):continue d[i] -= 1 return ans mo = Mo(A,query).solve(add_func, delete_func, 0) print(*mo)