#include<stdio.h>
using namespace std;
const int N = 100005, PUTERE = 1 << 16;
int aib[N];
int interog (int poz)
{
int s = 0;
while (poz > 0)
{
s += aib[poz];
poz -= poz & (-poz);
}
return s;
}
void actualizeaza (int poz, int n, int val)
{
while (poz <= n)
{
aib[poz] += val;
poz += poz & (-poz);
}
}
int cautBin (int x, int n)
{
int pas = PUTERE, sol;
while (pas != 0)
{
if (pas + sol <= n && interog (pas + sol) < x)
sol += pas;
pas >>= 1;
}
return sol + 1;
}
int main ()
{
FILE *in, *out;
in = fopen ("aib.in", "r");
out = fopen ("aib.out", "w");
int n, m;
fscanf (in, "%d%d", &n, &m);
int i, val;
for (i = 1; i <= n; i++)
{
fscanf (in, "%d", &val);
actualizeaza(i, n, val);
}
int cerinta, p, a, b;
for (i = 1; i <= m; i++)
{
fscanf (in, "%d", &cerinta);
if (cerinta == 0)
{
fscanf (in, "%d%d", &p, &val);
actualizeaza (p, n, val);
}
if (cerinta == 1)
{
fscanf (in, "%d%d", &a, &b);
fprintf (out, "%d", interog(b) - interog (a - 1));
}
if (cerinta == 2)
{
fscanf (in, "%d", &a);
p = cautBin(a, n);
if (interog (p) == a)
fprintf (out, "%d", p);
else
fprintf (out, "-1");
}
if ((cerinta == 1 || cerinta == 2) && i != m)
fprintf (out, "\n");
}
return 0;
}