#include <bits/stdc++.h>
using namespace std;
ifstream in("aib.in");
ofstream out("aib.out");
int v[100002];
int s[100002];
int n,a,b,m,c;
int arbore[400002];
int k;
const int nu_am_gasit=999999;
void build (int nod, int st, int dr)
{
if(st==dr) arbore[nod]=v[st];
else if(st<dr)
{
int m=(st+dr)/2;
int nod1=nod*2;
int nod2=2*nod+1;
build(nod1,st,m);
build(nod2,m+1,dr);
arbore[nod]=arbore[nod1]+arbore[nod2];
}
}
void op0 (int nod, int poz, int val, int st, int dr)
{
if(st==dr) arbore[nod]+=val;
else if(st<dr)
{
int m=(st+dr)/2;
int nod1=2*nod;
int nod2=2*nod+1;
if(poz<=m) op0(nod1,poz,val,st,m);
else op0(nod2,poz,val,m+1,dr);
arbore[nod]=arbore[nod1]+arbore[nod2];
}
}
int op1 (int nod, int a, int b, int st, int dr)
{
if(a==st && b==dr) return arbore[nod];
else
{
int m=(st+dr)/2;
int nod1=nod*2;
int nod2=2*nod+1;
if(a<=m)
{
if(b<=m)
return op1(nod1,a,b,st,m);
else
{
return (op1(nod1,a,m,st,m) + op1(nod2,m+1,b,m+1,dr));
}
}
else
return op1(nod2,a,b,m+1,dr);
}
}
void op2 (int sum, int st, int dr)
{
if(st==dr)
{
if(sum==s[st])
k=min(k,st);
}
else if(st<dr)
{
int m=(st+dr)/2;
op2(sum,st,m);
op2(sum,m+1,dr);
}
}
int main()
{
in>>n>>m;
for(int i=1; i<=n; i++)
{
in>>v[i];
s[i]=v[i]+s[i-1];
}
build(1,1,n);
cout<<s[8]<<'\n';
for(;m;m--)
{
in>>c;
switch(c)
{
case 0:
in>>a>>b;
op0(1,a,b,1,n);
break;
case 1:
in>>a>>b;
out<<op1(1,a,b,1,n)<<'\n';
break;
case 2:
in>>a;
k=nu_am_gasit;
op2(a,1,n);
if(k==nu_am_gasit) k=-1;
out<<k<<'\n';
break;
}
}
return 0;
}