#include <bits/stdc++.h>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
void Update(unsigned i, int val,vector<int>&aib)
{
i=i+1;
for(;i<=aib.size()-1;i=i+(i&(-i)))
{
aib[i]+=val;
}
}
int Query(unsigned i, vector<int>&aib)
{
int ans=0;
i=i+1;
for(;i>0;i=i-(i&(-i)))
{
ans+=aib[i];
}
return ans;
}
int Search(int val,vector<int>&aib)
{
int i=0,j=(1<<(31-__builtin_clz(aib.size()-1)));
for(;j>0;j>>=1)
{
if(i+j<=(int)aib.size()-1)
{
if(val>=aib[i+j])
{
i+=j;
val-=aib[i];
if(val==0)
{
return i-1;
}
}
}
}
return -1;
}
int main()
{
int n,m,x;
fin>>n>>m;
vector<int>aib(n+2,0);
for(int i=1;i<=n;i++)
{
fin>>x;
Update(i,x,aib);
}
int a,b;
for(;m;m--)
{
fin>>x;
switch(x)
{
case 0:
fin>>a>>b;
Update(a,b,aib);
break;
case 1:
fin>>a>>b;
fout<<Query(b,aib)-Query(a-1,aib)<<'\n';
break;
case 2:
fin>>a;
fout<<Search(a,aib)<<'\n';
break;
}
}
return 0;
}