#include<iostream>
#include<fstream>
#define DN 60010
using namespace std;
fstream fin("datorii.in",ios::in),fout("datorii.out",ios::out);
int n,m,N,pow[DN],A[DN];
void putere()
{
int i;
pow[0]=1;
for(i=1;i<DN;i++)
{
pow[i]=pow[i-1]*2;
if(n<=pow[i])
{
N=pow[i]; // 2^i
return ;
}
}
}
void build()
{
int i;
for(i=N-1;i>0;i--) A[i]=A[2*i]+A[2*i+1];
}
void update(int nod,int st,int dr,int a,int b)
{
if(a<st || dr<a) return ;
if(st==dr)
{
A[nod]-=b;
return ;
}
int f1=nod*2,f2=nod*2+1,m=(st+dr)/2;
update(f1,st,m,a,b);
update(f2,m+1,dr,a,b);
A[nod]=(A[f1]+A[f2]);
}
int querry(int nod,int st,int dr,int a,int b)
{
if(b<st || dr<a) return 0;
if(a<=st && dr<=b) return A[nod];
int f1=nod*2,f2=nod*2+1,m=(st+dr)/2,aux1,aux2;
aux1=querry(f1,st,m,a,b);
aux2=querry(f2,m+1,dr,a,b);
return (aux1+aux2);
}
int main()
{
int a,b,i,op;
fin>>n>>m;
putere();
for(i=1;i<=n;i++) fin>>A[N+i-1];
build();
for(i=1;i<=m;i++)
{
fin>>op>>a>>b;
if(op==0)
{
update(1,1,N,a,b);
}
else
{
fout<<querry(1,1,N,a,b)<<"\n";
}
}
}