#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
struct node
{
int l,r;
int mx;
int add;
int si[18];
};
node tr[N*4];
void pushup(int u)
{
tr[u].mx=max(tr[u*2].mx,tr[u*2+1].mx);
tr[u].si[2]=tr[u].si[3]=tr[u].si[5]=tr[u].si[7]=0;
for(int i=1;i<=10;i++)
{
tr[u].si[i]=max(tr[u*2].si[i],tr[u*2+1].si[i]);
}
}
void pushdown(int u)
{
if(tr[u].add>1)
{
int oi=tr[u].add;
int sz=0;
while(oi%2==0)
{
oi/=2;
sz++;
}
tr[u*2].si[2]+=sz;
tr[u*2+1].si[2]+=sz;
tr[u*2].mx=max(tr[u*2].mx,tr[u*2].si[2]);
tr[u*2+1].mx=max(tr[u*2+1].mx,tr[u*2+1].si[2]);
sz=0;
while(oi%3==0)
{
oi/=3;
sz++;
}
tr[u*2].si[3]+=sz;
tr[u*2+1].si[3]+=sz;
tr[u*2].mx=max(tr[u*2].mx,tr[u*2].si[3]);
tr[u*2+1].mx=max(tr[u*2+1].mx,tr[u*2+1].si[3]);
sz=0;
while(oi%5==0)
{
oi/=5;
sz++;
}
tr[u*2].si[5]+=sz;
tr[u*2+1].si[5]+=sz;
tr[u*2].mx=max(tr[u*2].mx,tr[u*2].si[5]);
tr[u*2+1].mx=max(tr[u*2+1].mx,tr[u*2+1].si[5]);
sz=0;
while(oi%7==0)
{
oi/=7;
sz++;
}
tr[u*2].si[7]+=sz;
tr[u*2+1].si[7]+=sz;
tr[u*2].mx=max(tr[u*2].mx,tr[u*2].si[7]);
tr[u*2+1].mx=max(tr[u*2+1].mx,tr[u*2+1].si[7]);
tr[u*2].add*=tr[u].add;
tr[u*2+1].add*=tr[u].add;
tr[u].add=1;
}
}
void build(int u,int l,int r)
{
tr[u].l=l;
tr[u].r=r;
tr[u].add=1;
tr[u].mx=0;
for(int i=1;i<=10;i++)tr[u].si[i]=0;
if(l==r)return;
int mid=l+r>>1;
build(u*2,l,mid);
build(u*2+1,mid+1,r);
pushup(u);
}
void change(int u,int l,int r,int x)
{
if(tr[u].l>=l&&tr[u].r<=r)
{
tr[u].add*=x;
int oi=x;
int sz=0;
while(oi%2==0)
{
oi/=2;
sz++;
}
tr[u].si[2]+=sz;
tr[u].mx=max(tr[u].mx,tr[u].si[2]);
sz=0;
while(oi%3==0)
{
oi/=3;
sz++;
}
tr[u].si[3]+=sz;
tr[u].mx=max(tr[u].mx,tr[u].si[3]);
sz=0;
while(oi%5==0)
{
oi/=5;
sz++;
}
tr[u].si[5]+=sz;
tr[u].mx=max(tr[u].mx,tr[u].si[5]);
sz=0;
while(oi%7==0)
{
oi/=7;
sz++;
}
tr[u].si[7]+=sz;
tr[u].mx=max(tr[u].mx,tr[u].si[7]);
return;
}
pushdown(u);
int mid=tr[u].l+tr[u].r>>1;
if(l<=mid)change(u*2,l,r,x);
if(r>mid) change(u*2+1,l,r,x);
pushup(u);
}
int query(int u,int l,int r)
{
if(tr[u].l>=l&&tr[u].r<=r)
{
return tr[u].mx;
}
int mid=tr[u].l+tr[u].r>>1;
int ans=0;
if(l<=mid)ans=max(ans,query(u*2,l,r));
if(r>mid) ans=max(ans,query(u*2+1,l,r));
return ans;
}
int n,m;
int main()
{
cin>>n>>m;
build(1,1,n);
for(int i=1;i<=m;i++)
{
string ai;
cin>>ai;
if(ai=="MULTIPLY")
{
int l,r,x;
cin>>l>>r>>x;
change(1,l,r,x);
}
else
{
int l,r;
cin>>l>>r;
int ans=query(1,l,r);
//if(ans==0)ans=1;
cout<<"ANSWER "<<ans<<endl;
}
}
return 0;
}