#include <bits/stdc++.h>
const int maxn = 1e5 + 5;
int n,q;
struct SegTree
{
int maxx[maxn<<2],lazy[maxn<<2];
inline void pushdown(int o)
{
if(lazy[o])
{
maxx[o<<1]+=lazy[o];
maxx[o<<1|1]+=lazy[o];
lazy[o<<1]+=lazy[o];
lazy[o<<1|1]+=lazy[o];
lazy[o]=0;
}
}
inline void update(int o,int l,int r,int ql,int qr,int val)
{
if(l>qr||r<ql)return;
if(ql<=l&&r<=qr){maxx[o]+=val;lazy[o]+=val;return;}
pushdown(o);
int m=(l+r)>>1;
update(o<<1,l,m,ql,qr,val);
update(o<<1|1,m+1,r,ql,qr,val);
maxx[o]=std::max(maxx[o<<1],maxx[o<<1|1]);
}
inline int query(int o,int l,int r,int ql,int qr)
{
if(ql<=l&&r<=qr)return maxx[o];
pushdown(o);
int m=(l+r)>>1;
int ans=-1e9;
if(ql<=m) ans=std::max(ans,query(o<<1,l,m,ql,qr));
if(qr>m) ans=std::max(ans,query(o<<1|1,m+1,r,ql,qr));
return ans;
}
}st[4]; // 0:2, 1:3, 2:5, 3:7
int main()
{
#ifdef LOCAL
freopen("input.in","r",stdin);
#endif
scanf("%d%d",&n,&q);
while(q--)
{
int l,r;
char op[10];scanf("%s%d%d",op,&l,&r);
if(op[1]=='U')
{
int x;scanf("%d",&x);
if(x==2) st[0].update(1,1,n,l,r,1);
else if(x==3) st[1].update(1,1,n,l,r,1);
else if(x==4) st[0].update(1,1,n,l,r,2);
else if(x==5) st[2].update(1,1,n,l,r,1);
else if(x==6) st[0].update(1,1,n,l,r,1),st[1].update(1,1,n,l,r,1);
else if(x==7) st[3].update(1,1,n,l,r,1);
else if(x==8) st[0].update(1,1,n,l,r,3);
else if(x==9) st[1].update(1,1,n,l,r,2);
else if(x==10) st[0].update(1,1,n,l,r,1),st[2].update(1,1,n,l,r,1);
}
else
{
int ans=0;
for(int i=0;i<4;i++)ans=std::max(ans,st[i].query(1,1,n,l,r));
printf("ANSWER %d\n",ans);
}
}
return 0;
}