#include <iostream>
#include <stdio.h>
using namespace std;
FILE*f=freopen("datorii.in","r",stdin);
FILE*g=freopen("datorii.out","w",stdout);
int Arb[450010],Val,Poz,divi,z1,z2,S,N,achit,pos;
char buff[290000];
void citire(int &nr)
{
while(buff[pos] < '0' || buff[pos] > '9') if(++pos == 290000) fread(buff, 1, 290000, stdin), pos = 0;
nr = 0;
while('0' <= buff[pos] && buff[pos] <= '9')
{
nr = nr * 10 + buff[pos] - '0';
if(++pos == 290000) fread(buff, 1, 290000, stdin), pos = 0;
}
}
void Update(int nod,int left,int right)
{
if (left==right)
{
if (achit==0) Arb[nod]=Val;
else Arb[nod]-=achit;
return;
}
divi=(left+right)/2;
if (Poz<=divi) Update(2*nod,left,divi);
else Update(2*nod+1,divi+1,right);
Arb[nod]=Arb[2*nod]+Arb[2*nod+1];
}
void Query(int nod,int left,int right)
{
if (z1<=left && right<=z2)
{
S+=Arb[nod];
return;
}
divi=(left+right)/2;
if (z1<=divi) Query(2*nod,left,divi);
if (divi<z2) Query(2*nod+1,divi+1,right);
}
int main()
{
int M,i,x,op,cost,zi;
fread(buff, 1, 290000, stdin);
citire(N);
citire(M);
for (i=1;i<=N;i++)
{
citire(x);
Poz=i; Val=x;
Update(1,1,N);
}
for (i=1;i<=M;i++)
{
citire(op);
if (op==0)
{
citire(zi);
citire(cost);
Poz=zi;
achit=cost;
Update(1,1,N);
}
else
{
citire(z1);
citire(z2);
S=0;
Query(1,1,N);
printf("%d\n",S);
}
}
}