#include <bits/stdc++.h>
using namespace std;
const int nmax = 100005;
int aib[nmax], n, m;
void update(int poz, int val)
{
for(int i=poz; i<=n; i+=i&(-i))
aib[i]+=val;
}
int query(int poz)
{
int sum=0, i;
for(i=poz; i; i-=i&(-i))
sum+=aib[i];
return sum;
}
int Bsearch(int val)
{
int st=1, dr=n, mid, sum;
while(st<=dr)
{
mid=(st+dr)>>1;
sum=query(mid);
if(sum==val) return mid;
if(val<sum) dr=mid-1;
else st=mid+1;
}
return -1;
}
int main()
{
freopen("aib.in", "r", stdin);
freopen("aib.out", "w", stdout);
int i, x, y, tip, sum, bs;
scanf("%d %d", &n, &m);
for(i=1; i<=n; i++)
{
scanf("%d", &x);
update(i, x);
}
while(m--)
{
scanf("%d %d", &tip, &x);
if(tip==0)
{
scanf("%d", &y);
update(x, y);
}
else if(tip==1)
{
scanf("%d", &y);
sum=query(y)-query(x-1);
printf("%d\n", sum);
}
else
{
bs=Bsearch(x);
printf("%d\n", bs);
}
}
fclose(stdin);
fclose(stdout);
return 0;
}