#include <iostream>
#include <fstream>
using namespace std;
ifstream fin ("datorii.in");
ofstream fout ("datorii.out");
void op0(int ,int ,int ,int ,int);
int op1(int ,int ,int ,int ,int);
int build(int ,int ,int );
int n,m,v[20000],w[20000];
int main()
{
int i,a,b,c;
fin>>n>>m;
v[1]=build(1,n,1);
for(i=1;i<=m;i++)
{
fin>>a>>b>>c;
if(a==1)
fout<<op1(1,n,1,b,c)<<"\n";
else
op0(1,n,1,b,c);
}
return 0;
}
int build(int li, int ls, int i)
{
if(li==ls)
{
fin>>v[i];
return v[i];
}
v[i]= build(li,(li+ls)/2,2*i)+build((li+ls)/2+1,ls,2*i+1);
return v[i];
}
int op1(int li, int ls, int i, int ci, int cs)
{
if(ci<=li && ls<=cs)
return v[i];
int mi=li,ms=ls;
if(mi<ci) mi=ci;
if(ms>cs) ms=cs;
if(mi<=ms)
return (op1(li,(li+ls)/2,2*i,ci,cs)+op1((li+ls)/2+1,ls,2*i+1,ci,cs));
return 0;
}
void op0(int li, int ls, int i, int t, int add)
{
if(li==ls && li==t)
{
v[i]-=add;
return;
}
if(t<=(li+ls)/2)
{
v[i]-=add;
op0(li,(li+ls)/2,2*i,t,add);
}
else
{
v[i]-=add;
op0((li+ls)/2+1,ls,2*i+1,t,add);
}
}