#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e5+10;
const int MINN=-0x7f7f7f7f7f7f7f7f;
int n,m,a[N],num,in[N],lt[N],rt[N],maxx[N],p[N],ext[N];
bool k[N],kn[N];
void block(){
num=sqrt(n);
if(num*num!=n) ++num;
int lar=num;
if(num*(num-1)>=n&&num*num!=n) --lar;
for(int i=1;i<num;i++){
lt[i]=rt[i-1]+1;
rt[i]=i*lar;
}
lt[num]=rt[num-1]+1;
rt[num]=n;
for(int i=1;i<=rt[num-1];i++){
in[i]=(i-1)/lar+1;
}
for(int i=lt[num];i<=n;i++){
in[i]=num;
}
for(int i=1;i<=num;i++){
maxx[i]=MINN;
for(int j=lt[i];j<=rt[i];j++){
if(a[j]>=maxx[i]){
maxx[i]=a[j];
p[i]=j;
}
}
}
}
void change(int x,int val,bool t){
a[x]=val-a[x]-ext[in[x]];
maxx[in[x]]=a[x];
p[in[x]]=x;
for(int i=lt[in[x]];i<=rt[in[x]];i++){
if(i==x) continue;
a[i]+=ext[in[x]];
if(a[i]>=maxx[in[x]]){
maxx[in[x]]=a[i];
p[in[x]]=max(p[in[x]],i);
}
}
ext[in[x]]=0;
if(!t){
k[x]=0;
for(int i=lt[in[x]];i<=rt[in[x]];i++){
if(k[i]) return;
}
kn[in[x]]=0;
return;
}
k[x]=1;
kn[in[x]]=1;
}
int ask(int l,int r){
int maxn=MINN,pt=0;
if(in[l]==in[r]){
for(int i=l;i<=r;i++){
if(a[i]+ext[in[l]]>=maxn){
maxn=a[i]+ext[in[l]];
pt=i;
}
}
for(int i=l;i<=r;i++){
if(k[i]) pt=i,maxn=a[i]+ext[in[l]];
}
change(pt,a[pt]+ext[in[pt]],0);
return maxn;
}
for(int i=l;i<=rt[in[l]];i++){
if(a[i]+ext[in[l]]>=maxn){
maxn=a[i]+ext[in[l]];
pt=i;
}
}
for(int i=in[l]+1;i<in[r];i++){
if(maxx[i]+ext[i]>=maxn){
maxn=maxx[i]+ext[i];
pt=p[i];
}
}
for(int i=lt[in[r]];i<=r;i++){
if(a[i]+ext[in[r]]>=maxn){
maxn=a[i]+ext[in[r]];
pt=i;
}
}
for(int i=l;i<=rt[in[l]];i++){
if(k[i]) pt=i,maxn=a[i]+ext[in[l]];
}
for(int i=in[l]+1;i<in[r];i++){
if(kn[i]){
for(int j=lt[i];j<=rt[i];j++){
if(k[j]) pt=j,maxn=a[j]+ext[i];
}
break;
}
}
for(int i=lt[in[r]];i<=r;i++){
if(k[i]) pt=i,maxn=a[i]+ext[in[r]];
}
change(pt,a[pt]+ext[in[pt]],0);
return maxn;
}
void update(int l,int r,int val){
maxx[in[l]]=MINN;
for(int i=lt[in[l]];i<l;i++){
if(a[i]>=maxx[in[l]]){
maxx[in[l]]=a[i];
p[in[l]]=i;
}
}
for(int i=l;i<=r;i++){
a[i]+=val;
if(a[i]>=maxx[in[l]]){
maxx[in[l]]=a[i];
p[in[l]]=i;
}
}
for(int i=r+1;i<=rt[in[l]];i++){
if(a[i]>=maxx[in[l]]){
maxx[in[l]]=a[i];
p[in[l]]=i;
}
}
}
void past(int l,int r,int val){
if(in[l]==in[r]){
update(l,r,val);
return;
}
update(l,rt[in[l]],val);
update(lt[in[r]],r,val);
for(int i=in[l]+1;i<in[r];i++){
ext[i]+=val;
}
}
inline int read(){
int s=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-') f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
s=(s<<3)+(s<<1)+(ch^48);
ch=getchar();
}
return s*f;
}
signed main(){
n=read(),m=read();
for(int i=1;i<=n;i++){
a[i]=read();
}
block();
int sum=0;
for(int i=1;i<=m;i++){
int op=read();
if(op==1){
int x=read(),val=read();
change(x,val,1);
continue;
}
int l=read(),r=read();
if(op==2){
int now=ask(l,r);
sum+=now;
printf("%d\n",now);
continue;
}
int val=read();
past(l,r,val);
}
if(sum<10000) printf("QAQ\n");
else if(sum<10000000) printf("Sakura\n");
else printf("ice\n");
return 0;
}