import java.util.*;

//update 2019/12/29

public class Main{

  static Scanner sc = new Scanner(System.in);

  public static void main(String[] args) {

    int N = nextInt();  int Q = nextInt();
    String[] S = splitString(next()); //N == S.length()

    for(int i=0;i<N-1;i++){ //NでRE、N-1でAC ------------↓
      if(S[i].equals("A") && S[i+1].equals("C")){ //[N-1+1]=[N] ⇒RE
        S[i+1] = "c"; //ACの存在をメモ
      }
    }

    int[] num = new int[N+1];

    for(int i=1;i<=N;i++){
      num[i] += num[i-1]; //今までのを追加
      if(S[i-1].equals("c")){ //num[0]を使わないため。
        num[i] += 1; //i文字目にcがあるので、新たに1追加
      }

    }

    //num[i] i文字目までにあるACの数

    for(int i=0;i<Q;i++){
      int l = nextInt();
      int r = nextInt();
      int ans = num[r]-num[l];
      System.out.println(ans);
    }

  }

  static String next(){
    return sc.next();
  }

  static int nextInt(){
    return Integer.parseInt(sc.next());
  }

  static long nextLong(){
    return Long.parseLong(sc.next());
  }

  static double nextDouble(){
    return Double.parseDouble(sc.next());
  }

  static String[] splitString(String s){
    return s.split("");
  }

  static char[] splitChar(String s){
    return s.toCharArray();
  }

  static int charToInt(char aaa){
    return aaa - 48;
  }

////////////////////////////////////////////
  public static int max(int[] a){
    int lng = a.length;
    int max = a[0];
    for(int i=1;i<lng;i++){
      max = Math.max(max,a[i]);
    }
    return max;
  }
  public static long max(long[] a){
    int lng = a.length;
    long max = a[0];
    for(int i=1;i<lng;i++){
      max = Math.max(max,a[i]);
    }
    return max;
  }
////////////////////////////////////////////

////////////////////////////////////////////
  public static int min(int[] a){
    int lng = a.length;
    int min = a[0];
    for(int i=1;i<lng;i++){
      min = Math.min(min,a[i]);
    }
    return min;
  }
  public static long min(long[] a){
    int lng = a.length;
    long min = a[0];
    for(int i=1;i<lng;i++){
      min = Math.min(min,a[i]);
    }
    return min;
  }
////////////////////////////////////////////

} import java.util.*; util.* java public class Main{

  static Scanner sc = new Scanner(System.in);

  public static void main(String[] args) {

    int N = nextInt();  int Q = nextInt();
    String[] S = splitString(next()); //N == S.length()

    for(int i=0;i<N-1;i++){ //NでRE、N-1でAC ------------↓
      if(S[i].equals("A") && S[i+1].equals("C")){ //[N-1+1]=[N] ⇒RE
        S[i+1] = "c"; //ACの存在をメモ
      }
    }

    int[] num = new int[N+1];

    for(int i=1;i<=N;i++){
      num[i] += num[i-1]; //今までのを追加
      if(S[i-1].equals("c")){ //num[0]を使わないため。
        num[i] += 1; //i文字目にcがあるので、新たに1追加
      }

    }

    //num[i] i文字目までにあるACの数

    for(int i=0;i<Q;i++){
      int l = nextInt();
      int r = nextInt();
      int ans = num[r]-num[l];
      System.out.println(ans);
    }

  }

  static String next(){
    return sc.next();
  }

  static int nextInt(){
    return Integer.parseInt(sc.next());
  }

  static long nextLong(){
    return Long.parseLong(sc.next());
  }

  static double nextDouble(){
    return Double.parseDouble(sc.next());
  }

  static String[] splitString(String s){
    return s.split("");
  }

  static char[] splitChar(String s){
    return s.toCharArray();
  }

  static int charToInt(char aaa){
    return aaa - 48;
  }

////////////////////////////////////////////
  public static int max(int[] a){
    int lng = a.length;
    int max = a[0];
    for(int i=1;i<lng;i++){
      max = Math.max(max,a[i]);
    }
    return max;
  }
  public static long max(long[] a){
    int lng = a.length;
    long max = a[0];
    for(int i=1;i<lng;i++){
      max = Math.max(max,a[i]);
    }
    return max;
  }
////////////////////////////////////////////

////////////////////////////////////////////
  public static int min(int[] a){
    int lng = a.length;
    int min = a[0];
    for(int i=1;i<lng;i++){
      min = Math.min(min,a[i]);
    }
    return min;
  }
  public static long min(long[] a){
    int lng = a.length;
    long min = a[0];
    for(int i=1;i<lng;i++){
      min = Math.min(min,a[i]);
    }
    return min;
  }
////////////////////////////////////////////

} Main static Scanner sc = new Scanner(System.in); sc new Scanner(System.in) public static void main(String[] args) {

    int N = nextInt();  int Q = nextInt();
    String[] S = splitString(next()); //N == S.length()

    for(int i=0;i<N-1;i++){ //NでRE、N-1でAC ------------↓
      if(S[i].equals("A") && S[i+1].equals("C")){ //[N-1+1]=[N] ⇒RE
        S[i+1] = "c"; //ACの存在をメモ
      }
    }

    int[] num = new int[N+1];

    for(int i=1;i<=N;i++){
      num[i] += num[i-1]; //今までのを追加
      if(S[i-1].equals("c")){ //num[0]を使わないため。
        num[i] += 1; //i文字目にcがあるので、新たに1追加
      }

    }

    //num[i] i文字目までにあるACの数

    for(int i=0;i<Q;i++){
      int l = nextInt();
      int r = nextInt();
      int ans = num[r]-num[l];
      System.out.println(ans);
    }

  } main {

    int N = nextInt();  int Q = nextInt();
    String[] S = splitString(next()); //N == S.length()

    for(int i=0;i<N-1;i++){ //NでRE、N-1でAC ------------↓
      if(S[i].equals("A") && S[i+1].equals("C")){ //[N-1+1]=[N] ⇒RE
        S[i+1] = "c"; //ACの存在をメモ
      }
    }

    int[] num = new int[N+1];

    for(int i=1;i<=N;i++){
      num[i] += num[i-1]; //今までのを追加
      if(S[i-1].equals("c")){ //num[0]を使わないため。
        num[i] += 1; //i文字目にcがあるので、新たに1追加
      }

    }

    //num[i] i文字目までにあるACの数

    for(int i=0;i<Q;i++){
      int l = nextInt();
      int r = nextInt();
      int ans = num[r]-num[l];
      System.out.println(ans);
    }

  } int N = nextInt(); N nextInt() nextInt int Q = nextInt(); Q nextInt() nextInt String[] S = splitString(next()); S splitString(next()) splitString next() next for(int i=0;i<N-1;i++){ //NでRE、N-1でAC ------------↓
      if(S[i].equals("A") && S[i+1].equals("C")){ //[N-1+1]=[N] ⇒RE
        S[i+1] = "c"; //ACの存在をメモ
      }
    } int i=0; int i=0; i 0 i<N-1 i N-1 N 1 i++ i++ i { //NでRE、N-1でAC ------------↓
      if(S[i].equals("A") && S[i+1].equals("C")){ //[N-1+1]=[N] ⇒RE
        S[i+1] = "c"; //ACの存在をメモ
      }
    } { //NでRE、N-1でAC ------------↓
      if(S[i].equals("A") && S[i+1].equals("C")){ //[N-1+1]=[N] ⇒RE
        S[i+1] = "c"; //ACの存在をメモ
      }
    } if(S[i].equals("A") && S[i+1].equals("C")){ //[N-1+1]=[N] ⇒RE
        S[i+1] = "c"; //ACの存在をメモ
      } S[i].equals("A") && S[i+1].equals("C") S[i].equals("A") S[i].equals S[i] S i "A" S[i+1].equals("C") S[i+1].equals S[i+1] S i+1 i 1 "C" { //[N-1+1]=[N] ⇒RE
        S[i+1] = "c"; //ACの存在をメモ
      } S[i+1] = "c" S[i+1] S i+1 i 1 "c" int[] num = new int[N+1]; num new int[N+1] N+1 N 1 for(int i=1;i<=N;i++){
      num[i] += num[i-1]; //今までのを追加
      if(S[i-1].equals("c")){ //num[0]を使わないため。
        num[i] += 1; //i文字目にcがあるので、新たに1追加
      }

    } int i=1; int i=1; i 1 i<=N i N i++ i++ i {
      num[i] += num[i-1]; //今までのを追加
      if(S[i-1].equals("c")){ //num[0]を使わないため。
        num[i] += 1; //i文字目にcがあるので、新たに1追加
      }

    } {
      num[i] += num[i-1]; //今までのを追加
      if(S[i-1].equals("c")){ //num[0]を使わないため。
        num[i] += 1; //i文字目にcがあるので、新たに1追加
      }

    } num[i] += num[i-1] num[i] num i num[i-1] num i-1 i 1 if(S[i-1].equals("c")){ //num[0]を使わないため。
        num[i] += 1; //i文字目にcがあるので、新たに1追加
      } S[i-1].equals("c") S[i-1].equals S[i-1] S i-1 i 1 "c" { //num[0]を使わないため。
        num[i] += 1; //i文字目にcがあるので、新たに1追加
      } num[i] += 1 num[i] num i 1 for(int i=0;i<Q;i++){
      int l = nextInt();
      int r = nextInt();
      int ans = num[r]-num[l];
      System.out.println(ans);
    } int i=0; int i=0; i 0 i<Q i Q i++ i++ i {
      int l = nextInt();
      int r = nextInt();
      int ans = num[r]-num[l];
      System.out.println(ans);
    } {
      int l = nextInt();
      int r = nextInt();
      int ans = num[r]-num[l];
      System.out.println(ans);
    } int l = nextInt(); l nextInt() nextInt int r = nextInt(); r nextInt() nextInt int ans = num[r]-num[l]; ans num[r]-num[l] num[r] num r num[l] num l System.out.println(ans) System.out.println System.out System System.out ans String[] args args static String next(){
    return sc.next();
  } next {
    return sc.next();
  } return sc.next(); sc.next() sc.next sc static int nextInt(){
    return Integer.parseInt(sc.next());
  } nextInt {
    return Integer.parseInt(sc.next());
  } return Integer.parseInt(sc.next()); Integer.parseInt(sc.next()) Integer.parseInt Integer sc.next() sc.next sc static long nextLong(){
    return Long.parseLong(sc.next());
  } nextLong {
    return Long.parseLong(sc.next());
  } return Long.parseLong(sc.next()); Long.parseLong(sc.next()) Long.parseLong Long sc.next() sc.next sc static double nextDouble(){
    return Double.parseDouble(sc.next());
  } nextDouble {
    return Double.parseDouble(sc.next());
  } return Double.parseDouble(sc.next()); Double.parseDouble(sc.next()) Double.parseDouble Double sc.next() sc.next sc static String[] splitString(String s){
    return s.split("");
  } splitString {
    return s.split("");
  } return s.split(""); s.split("") s.split s "" String s s static char[] splitChar(String s){
    return s.toCharArray();
  } splitChar {
    return s.toCharArray();
  } return s.toCharArray(); s.toCharArray() s.toCharArray s String s s static int charToInt(char aaa){
    return aaa - 48;
  } charToInt {
    return aaa - 48;
  } return aaa - 48; aaa - 48 aaa 48 char aaa aaa ////////////////////////////////////////////
  public static int max(int[] a){
    int lng = a.length;
    int max = a[0];
    for(int i=1;i<lng;i++){
      max = Math.max(max,a[i]);
    }
    return max;
  } max {
    int lng = a.length;
    int max = a[0];
    for(int i=1;i<lng;i++){
      max = Math.max(max,a[i]);
    }
    return max;
  } int lng = a.length; lng a.length a a.length int max = a[0]; max a[0] a 0 for(int i=1;i<lng;i++){
      max = Math.max(max,a[i]);
    } int i=1; int i=1; i 1 i<lng i lng i++ i++ i {
      max = Math.max(max,a[i]);
    } {
      max = Math.max(max,a[i]);
    } max = Math.max(max,a[i]) max Math.max(max,a[i]) Math.max Math max a[i] a i return max; max int[] a a public static long max(long[] a){
    int lng = a.length;
    long max = a[0];
    for(int i=1;i<lng;i++){
      max = Math.max(max,a[i]);
    }
    return max;
  } max {
    int lng = a.length;
    long max = a[0];
    for(int i=1;i<lng;i++){
      max = Math.max(max,a[i]);
    }
    return max;
  } int lng = a.length; lng a.length a a.length long max = a[0]; max a[0] a 0 for(int i=1;i<lng;i++){
      max = Math.max(max,a[i]);
    } int i=1; int i=1; i 1 i<lng i lng i++ i++ i {
      max = Math.max(max,a[i]);
    } {
      max = Math.max(max,a[i]);
    } max = Math.max(max,a[i]) max Math.max(max,a[i]) Math.max Math max a[i] a i return max; max long[] a a ////////////////////////////////////////////
  public static int min(int[] a){
    int lng = a.length;
    int min = a[0];
    for(int i=1;i<lng;i++){
      min = Math.min(min,a[i]);
    }
    return min;
  } min {
    int lng = a.length;
    int min = a[0];
    for(int i=1;i<lng;i++){
      min = Math.min(min,a[i]);
    }
    return min;
  } int lng = a.length; lng a.length a a.length int min = a[0]; min a[0] a 0 for(int i=1;i<lng;i++){
      min = Math.min(min,a[i]);
    } int i=1; int i=1; i 1 i<lng i lng i++ i++ i {
      min = Math.min(min,a[i]);
    } {
      min = Math.min(min,a[i]);
    } min = Math.min(min,a[i]) min Math.min(min,a[i]) Math.min Math min a[i] a i return min; min int[] a a public static long min(long[] a){
    int lng = a.length;
    long min = a[0];
    for(int i=1;i<lng;i++){
      min = Math.min(min,a[i]);
    }
    return min;
  } min {
    int lng = a.length;
    long min = a[0];
    for(int i=1;i<lng;i++){
      min = Math.min(min,a[i]);
    }
    return min;
  } int lng = a.length; lng a.length a a.length long min = a[0]; min a[0] a 0 for(int i=1;i<lng;i++){
      min = Math.min(min,a[i]);
    } int i=1; int i=1; i 1 i<lng i lng i++ i++ i {
      min = Math.min(min,a[i]);
    } {
      min = Math.min(min,a[i]);
    } min = Math.min(min,a[i]) min Math.min(min,a[i]) Math.min Math min a[i] a i return min; min long[] a a public class Main{

  static Scanner sc = new Scanner(System.in);

  public static void main(String[] args) {

    int N = nextInt();  int Q = nextInt();
    String[] S = splitString(next()); //N == S.length()

    for(int i=0;i<N-1;i++){ //NでRE、N-1でAC ------------↓
      if(S[i].equals("A") && S[i+1].equals("C")){ //[N-1+1]=[N] ⇒RE
        S[i+1] = "c"; //ACの存在をメモ
      }
    }

    int[] num = new int[N+1];

    for(int i=1;i<=N;i++){
      num[i] += num[i-1]; //今までのを追加
      if(S[i-1].equals("c")){ //num[0]を使わないため。
        num[i] += 1; //i文字目にcがあるので、新たに1追加
      }

    }

    //num[i] i文字目までにあるACの数

    for(int i=0;i<Q;i++){
      int l = nextInt();
      int r = nextInt();
      int ans = num[r]-num[l];
      System.out.println(ans);
    }

  }

  static String next(){
    return sc.next();
  }

  static int nextInt(){
    return Integer.parseInt(sc.next());
  }

  static long nextLong(){
    return Long.parseLong(sc.next());
  }

  static double nextDouble(){
    return Double.parseDouble(sc.next());
  }

  static String[] splitString(String s){
    return s.split("");
  }

  static char[] splitChar(String s){
    return s.toCharArray();
  }

  static int charToInt(char aaa){
    return aaa - 48;
  }

////////////////////////////////////////////
  public static int max(int[] a){
    int lng = a.length;
    int max = a[0];
    for(int i=1;i<lng;i++){
      max = Math.max(max,a[i]);
    }
    return max;
  }
  public static long max(long[] a){
    int lng = a.length;
    long max = a[0];
    for(int i=1;i<lng;i++){
      max = Math.max(max,a[i]);
    }
    return max;
  }
////////////////////////////////////////////

////////////////////////////////////////////
  public static int min(int[] a){
    int lng = a.length;
    int min = a[0];
    for(int i=1;i<lng;i++){
      min = Math.min(min,a[i]);
    }
    return min;
  }
  public static long min(long[] a){
    int lng = a.length;
    long min = a[0];
    for(int i=1;i<lng;i++){
      min = Math.min(min,a[i]);
    }
    return min;
  }
////////////////////////////////////////////

} public class Main{

  static Scanner sc = new Scanner(System.in);

  public static void main(String[] args) {

    int N = nextInt();  int Q = nextInt();
    String[] S = splitString(next()); //N == S.length()

    for(int i=0;i<N-1;i++){ //NでRE、N-1でAC ------------↓
      if(S[i].equals("A") && S[i+1].equals("C")){ //[N-1+1]=[N] ⇒RE
        S[i+1] = "c"; //ACの存在をメモ
      }
    }

    int[] num = new int[N+1];

    for(int i=1;i<=N;i++){
      num[i] += num[i-1]; //今までのを追加
      if(S[i-1].equals("c")){ //num[0]を使わないため。
        num[i] += 1; //i文字目にcがあるので、新たに1追加
      }

    }

    //num[i] i文字目までにあるACの数

    for(int i=0;i<Q;i++){
      int l = nextInt();
      int r = nextInt();
      int ans = num[r]-num[l];
      System.out.println(ans);
    }

  }

  static String next(){
    return sc.next();
  }

  static int nextInt(){
    return Integer.parseInt(sc.next());
  }

  static long nextLong(){
    return Long.parseLong(sc.next());
  }

  static double nextDouble(){
    return Double.parseDouble(sc.next());
  }

  static String[] splitString(String s){
    return s.split("");
  }

  static char[] splitChar(String s){
    return s.toCharArray();
  }

  static int charToInt(char aaa){
    return aaa - 48;
  }

////////////////////////////////////////////
  public static int max(int[] a){
    int lng = a.length;
    int max = a[0];
    for(int i=1;i<lng;i++){
      max = Math.max(max,a[i]);
    }
    return max;
  }
  public static long max(long[] a){
    int lng = a.length;
    long max = a[0];
    for(int i=1;i<lng;i++){
      max = Math.max(max,a[i]);
    }
    return max;
  }
////////////////////////////////////////////

////////////////////////////////////////////
  public static int min(int[] a){
    int lng = a.length;
    int min = a[0];
    for(int i=1;i<lng;i++){
      min = Math.min(min,a[i]);
    }
    return min;
  }
  public static long min(long[] a){
    int lng = a.length;
    long min = a[0];
    for(int i=1;i<lng;i++){
      min = Math.min(min,a[i]);
    }
    return min;
  }
////////////////////////////////////////////

} Main
import java.util.*;

//update 2019/12/29

public class Main{

  static Scanner sc = new Scanner(System.in);

  public static void main(String[] args) {

    int N = nextInt();  int Q = nextInt();
    String[] S = splitString(next()); //N == S.length()

    for(int i=0;i<N-1;i++){ //NでRE、N-1でAC ------------↓
      if(S[i].equals("A") && S[i+1].equals("C")){ //[N-1+1]=[N] ⇒RE
        S[i+1] = "c"; //ACの存在をメモ
      }
    }

    int[] num = new int[N+1];

    for(int i=1;i<=N;i++){
      num[i] += num[i-1]; //今までのを追加
      if(S[i-1].equals("c")){ //num[0]を使わないため。
        num[i] += 1; //i文字目にcがあるので、新たに1追加
      }

    }

    //num[i] i文字目までにあるACの数

    for(int i=0;i<Q;i++){
      int l = nextInt();
      int r = nextInt();
      int ans = num[r]-num[l];
      System.out.println(ans);
    }

  }

  static String next(){
    return sc.next();
  }

  static int nextInt(){
    return Integer.parseInt(sc.next());
  }

  static long nextLong(){
    return Long.parseLong(sc.next());
  }

  static double nextDouble(){
    return Double.parseDouble(sc.next());
  }

  static String[] splitString(String s){
    return s.split("");
  }

  static char[] splitChar(String s){
    return s.toCharArray();
  }

  static int charToInt(char aaa){
    return aaa - 48;
  }

////////////////////////////////////////////
  public static int max(int[] a){
    int lng = a.length;
    int max = a[0];
    for(int i=1;i<lng;i++){
      max = Math.max(max,a[i]);
    }
    return max;
  }
  public static long max(long[] a){
    int lng = a.length;
    long max = a[0];
    for(int i=1;i<lng;i++){
      max = Math.max(max,a[i]);
    }
    return max;
  }
////////////////////////////////////////////

////////////////////////////////////////////
  public static int min(int[] a){
    int lng = a.length;
    int min = a[0];
    for(int i=1;i<lng;i++){
      min = Math.min(min,a[i]);
    }
    return min;
  }
  public static long min(long[] a){
    int lng = a.length;
    long min = a[0];
    for(int i=1;i<lng;i++){
      min = Math.min(min,a[i]);
    }
    return min;
  }
////////////////////////////////////////////

}
