#include <iostream>
#include <fstream>
using namespace std;
int arbint[100000], v[100000];
void crearearbint(int v[], int left, int right, int pos = 1){
if(left == right) {
arbint[pos] = v[left];
return;
}
int mid = (left+right)/2;
crearearbint(v, left, mid, pos*2);
crearearbint(v, mid+1, right, pos*2+1);
arbint[pos] = arbint[pos*2]+arbint[pos*2+1];
}
void achitare(int left, int right, int zi, int val, int pos = 1){
if(left == right){
arbint[pos] -= val;
return;
}
int mid = (left+right)/2;
if(zi <= mid){
achitare(left, mid, zi, val, pos*2);
} else {
achitare(mid+1, right, zi, val, pos*2+1);
}
arbint[pos] = arbint[pos*2] + arbint[pos*2+1];
}
int getSuma(int left, int right, int ileft, int iright, int pos = 1){
if(left >= ileft && right <= iright){
return arbint[pos];
}
int mid = (left+right)/2;
if(iright <= mid){
return getSuma(left, mid, ileft, iright, pos*2);
}
if(ileft > mid){
return getSuma(mid+1, right, ileft, iright, pos*2+1);
}
return getSuma(left, mid, ileft, iright, pos*2) + getSuma(mid+1, right, ileft, iright, pos*2+1);
}
int main(){
ifstream f("datorii.in");
ofstream g("datorii.out");
int n, m;
int a, b, c;
f>>n>>m;
for(int i=1; i<=n; i++){
f>>v[i];
}
crearearbint(v, 1, n, 1);
while(m>0){
f>>a>>b>>c;
switch(a){
case 0: {
achitare(1, n, b, c, 1);
break;
}
case 1: {
g<<getSuma(1, n, b, c, 1)<<endl;
break;
}
default: {
break;
}
}
m--;
}
f.close();
g.close();
return 0;
}