#include<stdio.h>
int ind,type,sol,x,y,i,j,n,m,H[30009];
char s[1000000];
void update(int nod,int st,int dr,int poz,int x)
{
int m=(st+dr)/2;;
if (st==dr)
{
H[nod]-=x;
return;
}
if (poz<=m) update(nod<<1,st,m,poz,x);
else update((nod<<1)+1,m+1,dr,poz,x);
H[nod]=H[(nod<<1)]+H[(nod<<1)+1];
}
void querry(int nod,int st,int dr,int a,int b)
{
int m=(st+dr)/2;;
if (a<=st&&dr<=b)
{
sol+=H[nod];
return;
}
if (a<=m) querry(nod<<1,st,m,a,b);
if (b>m) querry((nod<<1)+1,m+1,dr,a,b);
}
bool isnumber(char ch)
{
if (ch>='0'&&ch<='9') return true;
return false;
}
int getnumber()
{
int nr=0;
while (!isnumber(s[ind])) ind++;
while (isnumber(s[ind]))
{
nr=nr*10+(s[ind]-'0');
ind++;
}
return nr;
}
int main()
{
freopen("datorii.in","r",stdin);
freopen("datorii.out","w",stdout);
fread(s,1,1000000,stdin);
ind=0;
n=getnumber();
m=getnumber();
for (i=1;i<=n;++i)
{
x=getnumber();
update(1,1,n,i,-x);
}
for (i=1;i<=m;++i)
{
type=getnumber();
x=getnumber();
y=getnumber();
if (type==0) update(1,1,n,x,y);
else
{
sol=0;
querry(1,1,n,x,y);
printf("%d\n",sol);
}
}
}