#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]);
            }
        }
    }
}