#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
#define lc t[x].l
#define rc t[x].r
typedef long long ll;
const int N=1e6+5,INF=1e9;
inline int read(){
char c=getchar();int x=0,f=1;
while(c<‘0‘||c>‘9‘){if(c==‘-‘)f=-1; c=getchar();}
while(c>=‘0‘&&c<=‘9‘){x=x*10+c-‘0‘; c=getchar();}
return x*f;
}
int fa[N];
inline int find(int x){return x==fa[x]?x:fa[x]=find(fa[x]);}
struct node{
int l,r,v,dis;
}t[N];
int Merge(int x,int y){
if(x==0||y==0) return x|y;
if(t[x].v>t[y].v) swap(x,y);
rc=Merge(rc,y);
if(t[lc].dis<t[rc].dis) swap(lc,rc);
t[x].dis=t[rc].dis+1;
return x;
}
int n,Q,a[N],x,y,vis[N];
char s[2];
int main(){
//freopen("in.txt","r",stdin);
n=read();
for(int i=1;i<=n;i++) t[i].v=read(),fa[i]=i;
t[0].dis=-1;
Q=read();
while(Q--){
scanf("%s",s);
if(s[0]==‘M‘){
x=read();y=read();
if(vis[x]||vis[y]) continue;
x=find(x);y=find(y);
if(x!=y) fa[x]=fa[y]=Merge(x,y);
}else{
x=read();
if(vis[x]) puts("0");
else{
x=find(x);vis[x]=1;
printf("%d\n",t[x].v);
fa[x]=Merge(lc,rc);
fa[fa[x]]=fa[x];
}
}
}
}