#include <iostream>
#include <fstream>
#define ll long long
using namespace std;
ll v[100005], aib[100005], N;
int lsb(int nr)
{
return (nr & (-nr));
}
void update(int p, int x)
{
for(int i = p; i <= N; i += lsb(i))
{
aib[i] += x;
}
}
int query(int x)
{
ll sum = 0;
for(int i = x; i > 0; i -= lsb(i))
{
sum += aib[i];
}
return sum;
}
bool check(int p, int val)
{
return query(p) < val;
}
int cautareBinara(int a)
{
/// fac cautare binara cu pas pt ca de ce nu
int sol = 0;
for(int b = 20; b >= 0; b--)
{
if((sol + (1<<b)) <= N && check(sol + (1 << b), a))
{
sol += (1<<b);
}
}
sol++;
if(a == query(sol))
{
return sol;
}
return -1;
}
int main()
{
ifstream cin("aib.in");
ofstream cout("aib.out");
int M,op,a,b;
cin>>N>>M;
for(int i = 1; i <= N; i++)
{
cin>>v[i];
update(i,v[i]);
}
while(M--)
{
cin>>op>>a;
if(op == 2)
{
cout<<cautareBinara(a)<<'\n';
continue;
}
cin>>b;
if(op == 0)
{
v[a] += b;
update(a,b);
continue;
}
cout<< query(b) - query(a-1)<<'\n';
}
return 0;
}