#include<fstream>
using namespace std;
int arb[34000],a[15001];
void arbore(int index,int stanga,int dreapta)
{
if(stanga==dreapta)
{
arb[index]=a[stanga];
return;
}
int mijloc=(stanga+dreapta)>>1;
arbore(index<<1,stanga,mijloc);
arbore(index<<1+1,mijloc+1,dreapta);
arb[index]=arb[index<<1]+arb[(index<<1)+1];
}
void op0(int index,int stanga,int dreapta,int T,int V)
{
if(T<stanga||T>dreapta)
return;
if(stanga==dreapta)
{
arb[index]-=V;
return;
}
int mijloc=(stanga+dreapta)>>1;
op0(index<<1,stanga,mijloc,T,V);
op0((index<<1)+1,mijloc+1,dreapta,T,V);
arb[index]=arb[index<<1]+arb[(index<<1)+1];
}
int op1(int index,int stanga,int dreapta,int i,int j)
{
if(j<stanga||dreapta<i)
return 0;
if(i<=stanga && j>=dreapta)
return arb[index];
int mijloc=(stanga+dreapta)>>1;
return op1(index<<1,stanga,mijloc,i,j)+op1((index<<1)+1,mijloc+1,dreapta,i,j);
}
int main() {
ifstream fin("datorii.in");
ofstream fout("datorii.out");
int N,Q;
fin>>N>>Q;
for(int i=1;i<=N;i++)
fin>>a[i];
arbore(1,1,N);
for(int i=1;i<=Q;i++)
{
int x,x1,x2;
fin>>x>>x1>>x2;
if(x==0)
op0(1,1,N,x1,x2);
else{
fout<<op1(1,1,N,x1,x2)<<"\n";
}
}
}