class B:
def __init__(self, l=None, r=None, v=None):
self.next = None
self.l = l
self.r = r
self.val = v
def __lt__(self, other):
return self.val < other.val
def sp(mid):
cur = root
while cur:
if cur.l == mid + 1: return cur
if cur.l <= mid and mid + 1 <= cur.r:
cur.next = B(mid + 1, cur.r, cur.val)
cur.r = mid
return cur.next
cur = cur.next
def p(l, r):
return sp(l - 1), sp(r)
def mg(l, r, v):
lb, rb = p(l, r)
lb.r = r
lb.val = v
lb.next = rb
def add(l, r, val):
lb, rb = p(l, r)
cur = lb
while cur != rb:
cur.val += val
cur = cur.next
def olp(n):
np = [0] * (n + 1)
np[1] = 1
prime = []
s = set()
for i in range(2, n + 1):
if not np[i]: prime.append(i);s.add(i)
for j in prime:
if i * j > n: break
np[i * j] = 1
if i % j == 0: break
return s
import math
def isPri(n):
if n < 2:return False
for i in range(2,int(math.sqrt(n)) + 1):
if n % i == 0:return False
return True
primes = olp(pow(10, 7))
n, q = map(int, input().split())
a = list(map(int, input().split()))
root = B(1, 1, a[0])
cur = root
for i in range(1, n):
cur.next = B(i + 1, i + 1, a[i])
cur = cur.next
for i in range(q):
line = input().split()
if line[0] == 'A':
v, l = map(int, line[1:])
add(l, l, v)
if line[0] == 'R':
a, l, r = map(int, line[1:])
mg(l, r, a)
if line[0] == 'Q':
l, r = map(int, line[1:])
cnt = 0
cur, rb = p(l, r)
while cur != rb:
if cur.val < pow(10,7) and cur.val in primes:
if cur.val <= pow(10, 7): cnt += cur.r - cur.l + 1
cur = cur.next
print(cnt)