{-
問の数が多すぎるため、次の問題を回答できる配列を用意しておく。
１～ｒ文字目までに、ACは何回現れるか。これをA_rとする。ただし、以下の計算の都合上A_0=0とする。
l,rのクエリに対して、だいたいで
A_r-A_(l-1)で近似できる。
これは正しいだろうか？
1~l-1について、l-1、lがACであったとき、これをA_(l-1)はカウントしないが、
A_rはカウントする。しかしこのACはl~rに含まれていないので、カウントしてはならない。

これを除去するために、次の動作をする。
クエリl,rに対して、l-1,lがACであるかどうかを見る。ACでないときは、
これを考える必要はないので、A_r-A_(l-1)で計算してよい。
これは、A_l A_l-1をみて、ふえているかどうかで判定できる。


もしACになっているときは、カウントが+1されているので、A_r-A_(l-1)-1で計算する

A_lをどのように計算すればよいだろうか？
先頭をはずしたものとzipする。これに2..をzipして、
0から末尾引数を回す。

これをアレイに格納する。
-}

import Data.Array
import Control.Monad

counter::String->[Int]
counter str = let doubled = map (\ (x,y) -> (x:y:[]) ) (zip str (tail str)) in
              (0:0:(eater 0 doubled))
            where eater _ []     = []
                  eater i (x:xs) = if x == "AC" then ((i+1):(eater (i+1) xs)) else i:(eater i xs)

gen_ar::String->Array Int Int
gen_ar str = let n = length str in listArray (0,n) (counter str)


solver::Array Int Int->Int->Int->Int
solver ar l r = (ar!r - ar!(l-1)) - (if ar!l - ar!(l-1) == 0 then 0 else 1)


main::IO()
main=do
  nq<-return.map read.words=<<getLine
  let n:q:[]= nq :: [Int]
  str<-getLine
  let ar = gen_ar str
  forM_ [1..q] (\_->print.(\ (l:r:_) -> solver ar l r ).map read.words=<<getLine)