#include <bits/stdc++.h>
int dr[] = {2, 2, -2, -2, 1, -1, 1, -1};
int dc[] = {1, -1, 1, -1, 2, 2, -2, -2};
int dr1[] = {0, 0, 0, 1, 1, 1, -1, -1, -1};
int dc1[] = {-1, 0, 1, -1, 0, 1, -1, 0, 1};
int dr2[] = {0, 0, 1, -1};
int dc2[] = {1, -1, 0, 0};
using namespace std;
long long int mod1 = 60;
int tree[61][100005 * 3];
void update(long long int n, long long int b, long long int e, long long int x,
            long long int val) {
  long long int mid = (b + e) >> 1, l = n * 2, r = l + 1, i;
  if (b == e) {
    for (i = 0; i < mod1; i++) {
      tree[i][n] = (i % val == 0) + 1;
    }
    return;
  }
  if (x <= mid)
    update(l, b, mid, x, val);
  else
    update(r, mid + 1, e, x, val);
  for (i = 0; i < mod1; i++) {
    long long int p = tree[i][l];
    long long int p1 = tree[(i + p) % mod1][r];
    tree[i][n] = p + p1;
  }
}
long long int query(long long int n, long long int b, long long int e,
                    long long int x, long long int y, long long int t) {
  if (b > y || e < x) return 0;
  if (b >= x && e <= y) return tree[t][n];
  long long int mid = (b + e) >> 1, l = n * 2, r = l + 1;
  long long int p = query(l, b, mid, x, y, t);
  long long int p1 = query(r, mid + 1, e, x, y, (t + p) % mod1);
  return p + p1;
}
int main() {
  int n, i, j, q, x, y;
  scanf("%d", &n);
  for (i = 1; i <= n; i++) {
    scanf("%d", &x);
    update(1, 1, n, i, x);
  }
  scanf("%d", &q);
  getchar();
  while (q--) {
    char ch;
    scanf("%c", &ch);
    scanf("%d%d", &x, &y);
    getchar();
    if (ch == 'A') {
      int ans = query(1, 1, n, x, y - 1, 0);
      printf("%d\n", ans);
    } else
      update(1, 1, n, x, y);
  }
}
