#include<cstdio>
using namespace std;
const int NMAX = 100000+5;
void Read(),Solve();
int N,M;
int AIB[NMAX];
void Update(int i,int value)
{
for(; i <= N; i += i&(-i))
AIB[i] += value;
}
int Query(int i)
{
int ans = 0;
for(; i >= 1; i -= i&(-i))
ans += AIB[i];
return ans;
}
int BS(int value)
{
int left,right,middle,sum;
for(left = 1, right = N; left <= right; )
{
middle = (left + right)/2;
sum = Query(middle);
if(sum < value) left = middle+1;
if(sum > value) right = middle-1;
return middle;
}
return -1;
}
int main()
{
Read();
Solve();
return 0;
}
void Read()
{
int i,x;
freopen("aib.in","r",stdin);
freopen("aib.out","w",stdout);
scanf("%d%d",&N,&M);
for(i = 1; i <= N; i++)
{
scanf("%d",&x);
Update(i,x);
}
}
void Solve()
{
int t,a,b;
for(; M; --M)
{
scanf("%d",&t);
if(t == 0)
{
scanf("%d%d",&a,&b);
Update(a,b);
}
else if(t == 1)
{
scanf("%d%d",&a,&b);
printf("%d\n",Query(b)-Query(a-1));
}
else
{
scanf("%d",&a);
printf("%d\n",BS(a));
}
}
}