#include<bits/stdc++.h>
#define pb push_back
#define is insert
#define INF INT_MAX
#define Mod(a,m) (((a)%(m)+(m))%(m))
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
const int N=1e5+5;
const int SQ=405;
int n,q,a[N],lzy[SQ],gcd[SQ],xo[N];
int len,num,st[SQ],ed[SQ],blk[N];
char op[10];
set<pii> s[N];
void pushup(int u){
gcd[u]=0;
for(int i=st[u];i<=ed[u];i++) gcd[u]=__gcd(gcd[u],a[i]);
}
void init(){
len=sqrt(n);
num=n/len+(n%len!=0);
for(int i=1;i<=num;i++){
st[i]=(i-1)*len+1;
ed[i]=i*len;
for(int j=st[i];j<=ed[i];j++) blk[j]=i;
}
for(int i=1;i<=num;i++){
for(int j=st[i];j<=ed[i];j++){
xo[j]=xo[j-1]^a[j];
s[i].is({xo[j],j});
gcd[i]=__gcd(gcd[i],a[j]);
}
}
}
void modify(int pos,int x){
int tmp=a[pos]^x;
a[pos]=x;
for(int i=pos;i<=ed[blk[pos]];i++){
s[blk[i]].erase({xo[i],i});
s[blk[i]].is({xo[i]^=tmp,i});
}
pushup(blk[pos]);
for(int i=blk[pos]+1;i<=num;i++) lzy[i]^=x;
}
int query(ll x){
int tmp=0;
for(int i=1,lst;i<=num;i++){
lst=tmp,tmp=__gcd(tmp,gcd[i]);
if(lst!=tmp){
int cur=lst;
for(int j=st[i];j<=ed[i];j++){
cur=__gcd(cur,a[j]);
if(1ll*cur*(xo[j]^lzy[i])==x) return j;
}
}
else{
if(x%tmp) continue;
auto it=s[i].lower_bound({(x/tmp)^lzy[i],0});
if(it==s[i].end()||1ll*(it->first^lzy[i])*tmp!=x) continue;
return it->second;
}
}
return -1;
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",a+i);
init();
scanf("%d",&q);
for(int i=1,pos;i<=q;i++){
ll x;
scanf("%s",op);
if(op[0]=='M') scanf("%d%lld",&pos,&x),pos++,modify(pos,x);
if(op[0]=='Q'){
scanf("%lld",&x);
int ans=query(x);
if(ans==-1) printf("no\n");
else printf("%d\n",ans-1);
}
}
return 0;
}