#include <bits/stdc++.h>
#define loop(i,a,b) for(int i = a; i <= b; i++)
#define ln '\n'
#define pb push_back
#define ll long long
#define mod 1000000007
#define inf 2e9
#define cin f
#define cout g
using namespace std;
ifstream f("datorii.in");
ofstream g("datorii.out");
int n, m, x, y, z, a[15001], abi[60001];
void build(int node, int left, int right){
if(left == right){
abi[node] = a[left];
}
else{
int middle = (left + right) / 2;
build(node * 2, left, middle);
build(node * 2 + 1, middle + 1, right);
abi[node] = abi[2 * node] + abi[2 * node + 1];
}
}
void update(int node, int left, int right, int position, int val){
if(left == right){
abi[node] -= val;
}
else{
int middle = (left + right) / 2;
if(position <= middle)
update(node * 2, left, middle, position, val);
else
update(node * 2 + 1, middle + 1, right, position, val);
abi[node] = abi[node * 2] + abi[node * 2 + 1];
}
}
int query(int node, int left, int right, int x, int y){
if(x <= left && y >= right){
return abi[node];
}
else{
int middle = (left + right) / 2;
if(y <= middle)
return query(node * 2, left, middle, x, y);
if(x > middle)
return query(node * 2 + 1, middle + 1, right, x, y);
return query(node * 2, left, middle, x, y) + query(node * 2 + 1, middle + 1, right, x, y);
}
}
int main(){
cin>>n>>m;
loop(i,1,n)cin>>a[i];
build(1, 1, n);
for(int i = 1; i <= 5; i++, cout<<ln)
for(int j = 1; j <= i; j++)cout<<abi[i + j - 1]<<' ';
loop(i,1,m){
cin>>x>>y>>z;
if(x == 1)cout<<query(1, 1, n, y, z)<<ln;
else update(1, 1, n, y, z);
}
}