#include <cstdio>
#define DIM 100005
int arb[DIM],n, m, sum[DIM];
void afis();
void modifica(int ind, int val)
{
int poz = 0, i = ind;
while (ind <= n)
{
arb[ind] += val;
while ((ind & (1<<poz)) == 0)
++poz;
ind += (1<<poz);
++poz;
}
for (; i <= n; ++i)
sum[i] += val;
}
int suma(int st, int dr)
{
int s1 = 0, poz = 0;
while (dr > 0)
{
s1 += arb[dr];
while ((dr & (1<<poz)) == 0)
++poz;
dr -= (1<<poz);
++poz;
}
int s2 = 0;
poz = 0;
--st;
while (st > 0)
{
s2 += arb[st];
while ((st & (1<<poz)) == 0)
++poz;
st -= (1<<poz);
++poz;
}
return s1-s2;
}
void afis()
{
for (int i = 1; i <= n; ++i)
printf("%3d ", i);
printf("\n");
for (int i = 1; i <= n; ++i)
printf("%3d ", arb[i]);
printf("\n");
printf("||==================||\n");
}
int cautare(int val, int st, int dr)
{
if (st >= dr)
{
if (sum[st] == val)
return st;
if (sum[dr] == val)
return dr;
return -1;
}
int mij = (st+dr)/2;
if (val <= sum[mij])
cautare(val, st, mij);
else
cautare(val, mij+1, dr);
}
int main()
{
FILE *f = fopen("aib.in", "r");
fscanf(f, "%d%d", &n, &m);
for (int i = 1, val; i <= n; ++i)
fscanf(f, "%d", &val), modifica(i, val), sum[i] = val + sum[i-1];
FILE *out = fopen("aib.out", "w");
for (int type, a, b;m;--m)
{
fscanf(f, "%d", &type);
if (type == 0)
fscanf(f, "%d%d", &a, &b), modifica(a, b);
else
if (type == 1)
fscanf(f, "%d%d", &a, &b), fprintf(out, "%d\n", suma(a, b));
else
{
// for (int i = 1; i <= n; ++i)
// printf("%d ", sum[i]);
// printf("\n");
fscanf(f, "%d", &a), fprintf(out, "%d\n", cautare(a, 1, n));
}
}
fclose(f);
fclose(out);
return 0;
}