#include <bits/stdc++.h>
std::ifstream fin("datorii.in");
std::ofstream fout("datorii.out");
#define maxn 15005
int v[maxn];
int aint[4*maxn];
void build(int n, int left, int right){
int mid = (left + right)/2;
if(left == right){
aint[n] = v[left];
}else{
build(2*n, left, mid);
build(2*n+1, mid+1, right);
aint[n] = aint[2*n] + aint[2*n+1];
}
}
void update(int n, int left, int right, int p, int val){
int mid = (left + right)/2;
if(left == right)
{
aint[n] -= val;
return;
}
if(p <= mid){
update(2*n, left, mid, p, val);
}else{
update(2*n+1, mid+1, right, p, val);
}
aint[n] = aint[2*n] + aint[2*n+1];
}
int query(int n, int left, int right, int a, int b){
int mid = (left+right)/2;
if(b < left || a > right)
return 0;
if(a <= left && right <= b)
return aint[n];
return query(2*n, left, mid, a, b) + query(2*n+1, mid+1, right, a, b);
}
int main()
{
long long int n, m, p ,q;
fin >> n >> m;
for(int i = 1; i <= n; ++i)
fin >> v[i];
build(1, 1, n);
int operationType, leftIntervalOrPos, rightIntervalOrVal;
for(int i = 1; i <= m; ++i)
{
fin >> operationType >> leftIntervalOrPos >> rightIntervalOrVal;
if(operationType == 0)
{
update(1, 1, n, leftIntervalOrPos, rightIntervalOrVal);
}else
{
fout << query(1, 1, n, leftIntervalOrPos, rightIntervalOrVal) << '\n';
}
}
}