#include <bits/stdc++.h>
using namespace std;
ifstream in("datorii.in");
ofstream out("datorii.out");
const int N = 15000;
int debt[N + 1];
int segment_tree[N*4+1];
void build (int node,int left,int right){
if(left==right)
segment_tree[node]=debt[left];
else{
int middle=(left+right)/2;
build(node*2,left,middle);
build(node*2+1,middle+1,right);
segment_tree[node]=segment_tree[node*2]+segment_tree[node*2+1];
}
}
void update(int node, int left, int right, int day, int value){
if(left==right)
segment_tree[node]-=value;
else{
int middle=(left+right)/2;
if(day<=middle)
update(node*2,left,middle,day,value);
else
update(node*2+1,middle+1,right,day,value);
segment_tree[node]=segment_tree[node*2]+segment_tree[node*2+1];
}
}
int query(int node, int left, int right, int query_left, int query_right){
if (query_left <= left && right <= query_right){
return segment_tree[node];
}else{
int middle = (left + right) / 2;
if (query_right <= middle)
return query(node * 2, left, middle, query_left, query_right);
if (middle+1<=query_left)
return query(node * 2 + 1, middle + 1, right, query_left, query_right);
return query(node * 2, left, middle, query_left, query_right) +query(node * 2 + 1, middle + 1, right, query_left, query_right);
}
}
int main()
{
int n, q;
in >> n>>q;
for (int i = 1; i <= n; ++i)
in >> debt[i];
build(1, 1, n);
while (q--)
{
int t;
in >> t;
if (t == 0) // we pay 'value' money in day 'day'
{
int day, value;
in>>day>>value;
update(1, 1, n, day, value);
}
else // return the amount of money that we have to pay between days 'left' and 'right'
{
int left, right;
in >> left >> right;
out << query(1, 1, n, left, right) << "\n";
}
}
}