#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m;
struct daduoli {
int s[2],z,sum,subval,f;
bool tag;
}tree[200010];
bool isroot(int x) {
int fa=tree[x].f;
if(fa==0||(tree[fa].s[0]!=x&&tree[fa].s[1]!=x))return true;
return false;
}
void push_up(int x) {
tree[x].sum=1+tree[tree[x].s[0]].sum+tree[tree[x].s[1]].sum+tree[x].subval;
}
void connect(int u,int v,int d) {
if(u)tree[u].s[d]=v;
if(v)tree[v].f=u;
}
void rot(int x) {
int y=tree[x].f,z=tree[y].f,d=(tree[y].s[0]!=x);
if(isroot(y))tree[x].f=tree[y].f;
else connect(z,x,(tree[z].s[0]!=y));
connect(y,tree[x].s[d^1],d);
connect(x,y,d^1);
push_up(y);
}
void push_down(int x) {
if(tree[x].tag==1) {
int lson=tree[x].s[0],rson=tree[x].s[1];
tree[lson].tag^=1;tree[rson].tag^=1;
swap(tree[lson].s[0],tree[lson].s[1]);
swap(tree[rson].s[0],tree[rson].s[1]);
tree[x].tag=0;
}
}
void dfs(int x) {
if(!isroot(x))dfs(tree[x].f);
push_down(x);
}
void splay(int x) {
dfs(x);
while(!isroot(x)) {
int y=tree[x].f,z=tree[y].f;
if(!isroot(y)) {
if((tree[y].s[0]==x)^(tree[z].s[0]==y)==0)rot(y);
else rot(x);
}
rot(x);
}
push_up(x);
}
void access(int u) {
int pre=0;
while(u) {
splay(u);
if(tree[u].s[1])tree[u].subval+=tree[tree[u].s[1]].sum;
if(pre)tree[u].subval-=tree[pre].sum;
tree[u].s[1]=pre;
push_up(u);
pre=u;
u=tree[u].f;
}
}
void evert(int u) {
access(u);splay(u);
tree[u].tag^=1;
swap(tree[u].s[0],tree[u].s[1]);
push_up(u);
}
int findrt(int node) {
access(node);splay(node);
push_down(node);
while(tree[node].s[0]) {
node=tree[node].s[0];
push_down(node);
}
return node;
}
void link(int u,int v) {
// if(findrt(u)==findrt(v))return ;
evert(u);
tree[u].f=v;
tree[v].subval+=tree[u].sum;
push_up(v);
}
void cut(int u,int v) {
evert(v);access(u);splay(u);
if(tree[u].s[0]==v&&tree[v].s[1]==0) {
tree[u].s[0]=0;
tree[v].f=0;
push_up(u);
}
}
int query(int u,int v) {
if(findrt(u)!=findrt(v))return -1;
evert(v);
access(u);
splay(u);
return (tree[v].subval+1)*(tree[u].subval+1);
}
signed main(){
cin>>n>>m;
char opt;
int x,y;
for(int i=1;i<=n;++i)tree[i].sum=1;
for(int i=1;i<=m;++i) {
cin>>opt;
scanf("%lld%lld",&x,&y);
if(opt=='A')link(x,y);
if(opt=='Q')printf("%lld\n",query(x,y));
}
return 0;
}