#include<iostream>
#include<algorithm>
#include<math.h>
#include<map>
#include<string>
using namespace std;
typedef int ll;
const int inf = 0x3f3f3f3f;
struct node
{
ll l, r, lazy, num;
}t[4000050];
ll a[1000005];
void build(int p, int x, int y)
{
t[p].l = x;
t[p].r = y;
if (x == y) { t[p].num = a[x]; return; }
ll mid = (x + y) / 2;
if (mid >= x)build(p * 2, x, mid);
if (mid < y)build(p * 2 + 1, mid + 1, y);
t[p].num = max(t[p * 2].num, t[p * 2 + 1].num);
}
void spread(ll p)
{
if (t[p].lazy)
{
t[p * 2].lazy += t[p].lazy;
t[p * 2 + 1].lazy += t[p].lazy;
t[p * 2].num += t[p].lazy;
t[p * 2 + 1].num += t[p].lazy;
t[p].lazy = 0;
}
}
ll ans;
map<ll, ll>vis;
ll vi;
void ask(ll p, ll x, ll y)
{
if (t[p].l >= x && t[p].r <= y)
{
if (t[p].l == t[p].r)
{
if (ans < t[p].num)
{
ans = t[p].num;
vi = t[p].l;
}
else if (ans == t[p].num)
{
if (t[p].l > vi)
{
vi = t[p].l;
}
}
}
else
{
ll mid = (t[p].l + t[p].r) / 2;
if (mid >= x && t[p].num == t[p * 2].num)
{
ask(p * 2, x, y);
}
if (mid < y&&t[p * 2 + 1].num == t[p].num)
{
ask(p * 2 + 1, x, y);
}
}
t[p].num = max(t[p * 2].num, t[p * 2 + 1].num);
return;
}
spread(p);
ll mid = (t[p].l + t[p].r) / 2;
if (mid >= x)
{
ask(p * 2, x, y);
}
if (mid < y)
{
ask(p * 2 + 1, x, y);
}
t[p].num=max(t[p * 2].num, t[p * 2 + 1].num);
}
void update(ll p, ll x, ll y, ll z)
{
if (t[p].l >= x && t[p].r <= y)
{
t[p].lazy += z;
t[p].num += z;
return;
}
spread(p);
ll mid = (t[p].l + t[p].r) / 2;
if (mid >= x)
{
update(p * 2, x, y, z);
}
if (mid < y)
{
update(p * 2 + 1, x, y, z);
}
t[p].num = max(t[p * 2].num, t[p * 2 + 1].num);
}
void fyw(ll p, ll x, ll y)
{
if (t[p].l == t[p].r&&t[p].l == x)
{
if (!vis[t[p].l])
{
vis[t[p].l] = 1;
t[p].num = y - t[p].num + inf;
}
else
{
t[p].num -= inf;
t[p].num = y - t[p].num + inf;
}
return;
}
ll mid = (t[p].l + t[p].r) / 2;
spread(p);
if (mid >= x)
{
fyw(p * 2, x, y);
}
else
{
fyw(p * 2 + 1, x, y);
}
t[p].num = max(t[p * 2].num, t[p * 2 + 1].num);
}
ll sum;
int main()
{
std::ios::sync_with_stdio(false);
ll n, m;
cin >> n >> m;
for (int i = 1; i <= n; i++)
{
cin >> a[i];
}
build(1, 1, n);
while (m--)
{
ll x, y, z;
cin >> x;
if (x == 1)
{
cin >> y >> z;
fyw(1, y, z);
}
else if (x == 2)
{
cin >> y >> z;
ans = -0x3f3f3f3f;
vi = 0;
ask(1, y, z);
update(1, vi, vi, -ans);
if (vis[vi] == 1)
{
ans -= inf;
vis[vi] = 0;
}
cout << ans << endl;
sum += ans;
}
else if (x == 3)
{
cin >> x >> y >> z;
update(1, x, y, z);
}
}
if (sum < 10000)
{
cout << "QAQ";
}
else if (sum >= 10000 && sum < 10000000)
{
cout << "Sakura";
}
else
{
cout << "ice";
}
}