import bisect



N,Q =  list(map(int, input().split()))

S = eval(input())



start = []

# end = []



for i in range(N-1):

	if S[i] == "A" and S[i+1] == "C":

		start.append(i)

#		end.append(i+1)



length = len(start)

for _ in range(Q):

	left, right = list(map(int, input().split()))

	left -= 1

	right -= 1



	if length == 0:

		print((0))

	else:

		# startの中で、left以上であるものの最小インデックス



		l1 = bisect.bisect_left(start, left)

#		r1 = bisect.bisect_right(end, right) - 1

		r1 = bisect.bisect_right(start, right-1) - 1



		print((r1-l1+1))



'''



	r = length

	l = 0

	c = int((r+l)//2)

	while(l<r):



		if start[c] >= left:

			r = c

			c = int((r+l)//2)

		else:

			l = c

			c = int((r+l)//2)



	X1 = c



	# endの中で、right以下であるものの最大インデックス

	r = length

	l = 0

	c = int((r+l)//2)

	while(l<r):



		if end[c] > right:

			r = c

			c = int((r+l)//2)

		else:

			l = c

			c = int((r+l)//2)



	X2 = c



	print(X2-X1+1)

'''
# クエリが複数回与えられて、毎回のクエリに対する回答をする必要がある

# という時点で累積和を意識するべきだった……



# 競技中に一瞬思いついたが、10万の配列を作ったときにメモリが足りるかを懸念して避けてしまった

# 10万くらいなら余裕で足りるよ



# printしてみた配列の大きさ：

# 提出時の表示： URLを張る



N,Q =  list(map(int, input().split()))

S = eval(input())



cumsum = []

# cumsum[i] := (0-indexで)0文字目からi文字目までに含まれる部分列"AC"の個数

# (0-indexで)l文字目からr文字目までに含まれる部分列"AC"の個数は、cumsum[r] -cumsum[l]である

# l-1文字目とl文字目が"AC"になるケースも除外したいので、cumsum[l]を引くこと



cumsum.append(0)

summ = 0

for i in range(1,N):

	if S[i-1] == "A" and S[i] == "C":

		summ +=1

	cumsum.append(summ)



for _ in range(Q):

	left, right = list(map(int, input().split()))

	left -= 1 # 1-indexから0-indexに変更する

	right -= 1

	print((cumsum[right] - cumsum[left]))



import bisect

N, Q = list(map(int, input().split()))
S = eval(input())
start = []
# end = []
for i in range(N - 1):
    if S[i] == "A" and S[i + 1] == "C":
        start.append(i)
# 		end.append(i+1)
length = len(start)
for _ in range(Q):
    left, right = list(map(int, input().split()))
    left -= 1
    right -= 1
    if length == 0:
        print((0))
    else:
        # startの中で、left以上であるものの最小インデックス
        l1 = bisect.bisect_left(start, left)
        # 		r1 = bisect.bisect_right(end, right) - 1
        r1 = bisect.bisect_right(start, right - 1) - 1
        print((r1 - l1 + 1))
"""
	r = length
	l = 0
	c = int((r+l)//2)
	while(l<r):
		if start[c] >= left:
			r = c
			c = int((r+l)//2)
		else:
			l = c
			c = int((r+l)//2)
	X1 = c
	# endの中で、right以下であるものの最大インデックス
	r = length
	l = 0
	c = int((r+l)//2)
	while(l<r):
		if end[c] > right:
			r = c
			c = int((r+l)//2)
		else:
			l = c
			c = int((r+l)//2)
	X2 = c
	print(X2-X1+1)
"""

# クエリが複数回与えられて、毎回のクエリに対する回答をする必要がある
# という時点で累積和を意識するべきだった……
# 競技中に一瞬思いついたが、10万の配列を作ったときにメモリが足りるかを懸念して避けてしまった
# 10万くらいなら余裕で足りるよ
# printしてみた配列の大きさ：
# 提出時の表示： URLを張る
N, Q = list(map(int, input().split()))
S = eval(input())
cumsum = []
# cumsum[i] := (0-indexで)0文字目からi文字目までに含まれる部分列"AC"の個数
# (0-indexで)l文字目からr文字目までに含まれる部分列"AC"の個数は、cumsum[r] -cumsum[l]である
# l-1文字目とl文字目が"AC"になるケースも除外したいので、cumsum[l]を引くこと
cumsum.append(0)
summ = 0
for i in range(1, N):
    if S[i - 1] == "A" and S[i] == "C":
        summ += 1
    cumsum.append(summ)
for _ in range(Q):
    left, right = list(map(int, input().split()))
    left -= 1  # 1-indexから0-indexに変更する
    right -= 1
    print((cumsum[right] - cumsum[left]))

-import bisect - +# クエリが複数回与えられて、毎回のクエリに対する回答をする必要がある +# という時点で累積和を意識するべきだった…… +# 競技中に一瞬思いついたが、10万の配列を作ったときにメモリが足りるかを懸念して避けてしまった +# 10万くらいなら余裕で足りるよ +# printしてみた配列の大きさ： +# 提出時の表示： URLを張る -start = [] -# end = [] -for i in range(N - 1): -    if S[i] == "A" and S[i + 1] == "C": -        start.append(i) -# 		end.append(i+1) -length = len(start) +cumsum = [] +# cumsum[i] := (0-indexで)0文字目からi文字目までに含まれる部分列"AC"の個数 +# (0-indexで)l文字目からr文字目までに含まれる部分列"AC"の個数は、cumsum[r] -cumsum[l]である +# l-1文字目とl文字目が"AC"になるケースも除外したいので、cumsum[l]を引くこと +cumsum.append(0) +summ = 0 +for i in range(1, N): +    if S[i - 1] == "A" and S[i] == "C": +        summ += 1 +    cumsum.append(summ) -    left -= 1 +    left -= 1  # 1-indexから0-indexに変更する -    if length == 0: -        print((0)) -    else: -        # startの中で、left以上であるものの最小インデックス -        l1 = bisect.bisect_left(start, left) -        # 		r1 = bisect.bisect_right(end, right) - 1 -        r1 = bisect.bisect_right(start, right - 1) - 1 -        print((r1 - l1 + 1)) -""" -	r = length -	l = 0 -	c = int((r+l)//2) -	while(l<r): -		if start[c] >= left: -			r = c -			c = int((r+l)//2) -		else: -			l = c -			c = int((r+l)//2) -	X1 = c -	# endの中で、right以下であるものの最大インデックス -	r = length -	l = 0 -	c = int((r+l)//2) -	while(l<r): -		if end[c] > right: -			r = c -			c = int((r+l)//2) -		else: -			l = c -			c = int((r+l)//2) -	X2 = c -	print(X2-X1+1) -""" +    print((cumsum[right] - cumsum[left]))