#include <bits/stdc++.h>
using namespace std;
const double pi = acos(-1.0);
const double eps = 1e-8;
const int maxn = 200010;
int tree[maxn * 2][62], in[maxn];
void merge(int root) {
  int lc = 2 * root;
  int rc = lc + 1;
  for (int i = 0; i < 60; i++) {
    int start_right = (i + tree[lc][i]) % 60;
    int total = tree[lc][i] + tree[rc][start_right];
    tree[root][i] = total;
  }
}
void build(int root, int l, int r) {
  if (l == r) {
    for (int i = 0; i < 60; i++)
      if (i % in[l] == 0)
        tree[root][i] = 2;
      else
        tree[root][i] = 1;
    return;
  }
  int mid = (l + r) / 2;
  build(2 * root, l, mid);
  build(2 * root + 1, mid + 1, r);
  merge(root);
}
void update(int root, int l, int r, int index, int val) {
  if (l == r) {
    in[l] = val;
    for (int i = 0; i < 60; i++)
      if (i % in[l] == 0)
        tree[root][i] = 2;
      else
        tree[root][i] = 1;
    return;
  }
  int mid = (l + r) / 2;
  if (index <= mid)
    update(2 * root, l, mid, index, val);
  else
    update(2 * root + 1, mid + 1, r, index, val);
  merge(root);
}
int query(int root, int x, int y, int l, int r, int tm) {
  if ((x == l) && (y == r)) {
    return tree[root][tm];
  }
  int mid = (l + r) / 2;
  if (y <= mid)
    return query(2 * root, x, y, l, mid, tm);
  else if (x > mid)
    return query(2 * root + 1, x, y, mid + 1, r, tm);
  else {
    int lt = query(2 * root, x, mid, l, mid, tm);
    return lt + query(2 * root + 1, mid + 1, y, mid + 1, r, (lt + tm) % 60);
  }
}
int main() {
  int N;
  scanf("%d", &N);
  for (int i = 1; i <= N; i++) scanf("%d", &in[i]);
  build(1, 1, N);
  int q;
  scanf("%d", &q);
  while (q--) {
    char s[10];
    int x, y;
    scanf("%s %d %d", s, &x, &y);
    if (s[0] == 'C')
      update(1, 1, N, x, y);
    else
      printf("%d\n", query(1, x, y - 1, 1, N, 0));
  }
  return 0;
  return 0;
}
