#include<cstdio>
#include<iostream>
#define N 100001
using namespace std;
int n,m,p,key[N],tot,sa[N],fa[N],root[N];
struct node
{
int l,r,siz;
}tr[N*20];
int find(int x) {return x==fa[x] ? fa[x] :fa[x]=find(fa[x]);}
void add(int & k,int l,int r,int x)
{
if(!k) k=++tot;
if(l==r) {tr[k].siz=1;return;}
int mid=l+r>>1;
if(x<=mid) add(tr[k].l,l,mid,x);
else add(tr[k].r,mid+1,r,x);
tr[k].siz=tr[tr[k].l].siz+tr[tr[k].r].siz;
}
int merge(int x,int y)
{
if(!x) return y;
if(!y) return x;
tr[x].l=merge(tr[x].l,tr[y].l);
tr[x].r=merge(tr[x].r,tr[y].r);
tr[x].siz=tr[tr[x].l].siz+tr[tr[x].r].siz;
return x;
}
int query(int x,int l,int r,int k)
{
if(l==r) return l;
int mid=l+r>>1,tmp=tr[tr[x].l].siz;
if(tmp>=k) return query(tr[x].l,l,mid,k);
else return query(tr[x].r,mid+1,r,k-tmp);
}
int read()
{
int x=0,f=1;char ch=getchar();
while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();}
while(ch>=‘0‘&&ch<=‘9‘) x=x*10+ch-48,ch=getchar();
return x*f;
}
int main()
{
n=read();m=read();
for(int i=1;i<=n;i++) key[i]=read(),fa[i]=i,sa[key[i]]=i;
int x,y,r1,r2;
for(int i=1;i<=m;i++)
{
x=read();y=read();
r1=find(x),r2=find(y);
fa[r1]=r2;
}
for(int i=1;i<=n;i++)
{
int r=find(i);
add(root[r],1,n,key[i]);
}
p=read();
char c[3];int s;
for(int i=1;i<=p;i++)
{
scanf("%s",c);
x=read();y=read();
if(c[0]==‘B‘)
{
r1=find(x);r2=find(y);
if(r1!=r2)
{
fa[r2]=r1;
merge(root[r1],root[r2]);
}
}
else
{
s=find(x);
if(tr[root[s]].siz<y) printf("-1\n");
else
{
s=query(root[s],1,n,y);
printf("%d\n",sa[s]);
}
}
}
}