#include <fstream>
using namespace std;
ifstream f1("aib.in");
ofstream f2("aib.out");
#define MX 100005
int n,m,i, a,b,o, ai[2*MX+10],k ;
void update(int nod, int st, int dr)
{
if (st==dr ) {ai[nod]+=b; return; }
int m=(st+dr)/2;
if (a<=m) update(nod*2,st,m);
else update(nod*2+1,m+1,dr);
ai[nod]=ai[nod*2]+ai[nod*2+1];
}
int query(int nod, int st, int dr)
{
if (a<=st && dr<=b ) return ai[nod];
int m=(st+dr)/2, sm=0;
if (a<=m ) sm+=query(nod*2,st,m);
if (b>m ) sm+=query(nod*2+1,m+1,dr);
return sm;
}
int query2(int nod, int st, int dr, int sm)
{
if (st>=dr && sm-ai[nod]!=0 ) return -1; else
if (sm-ai[nod]==0 && st<=dr) return dr;
int m=(st+dr)/2;
if (sm-ai[nod*2]<=0 ) return query2(nod*2,st,m,sm);
else return query2(nod*2+1,m+1,dr,sm-ai[nod*2] );
}
int main()
{
f1>>n>>m;
for (a=1; a<=n; a++)
{ f1>>b;
update(1,1,n); }
for (i=1; i<=m; i++)
{ f1>>o>>a;
if (o!=2)
f1>>b;
if (!o) update(1,1,n);
else if (o==1) f2<<query(1,1,n)<<"\n";
else f2<<query2(1,1,n,a)<<"\n"; }
f2.close();
return 0;
}