#include <bits/stdc++.h>
using namespace std;
struct tnode
{
tnode *l,*r;
int cnt;
};
using pnode=tnode*;
pnode nil{new tnode{nil,nil,0}};
void check(pnode& p){if(p==nil)p=new tnode{nil,nil,0};}
void modify(pnode& p,int k,int v,int cnt)
{
check(p);
p->cnt+=v;
if (cnt==1) return;
int cq{cnt>>1};
if (k<=cq) modify(p->l,k,v,cq);
else modify(p->r,k-cq,v,cnt-cq);
}
int query(pnode p,int k,int L,int R)
{
if (p->cnt==0||R<=k) return p->cnt;
int mid{L+R>>1};
if (k<=mid) return query(p->l,k,L,mid);
else return p->l->cnt+query(p->r,k,mid,R);
}
int main()
{
int n,m;
cin>>n>>m;
int t,x,y;pnode rt{nil};
for (int i{1};i<=n;++i)
{
scanf("%d",&t);
modify(rt,i,t,n);
}
while (m--)
{
scanf("%d %d %d",&t,&x,&y);
switch(t)
{
case 1:
modify(rt,x,y,n);
break;
case 2:
printf("%d\n",query(rt,y+1,1,n+1)-query(rt,x,1,n+1));
break;
}
}
return 0;
}