#include <fstream>
using namespace std;
ifstream f("datorii.in");
ofstream g("datorii.out");
int N, M, v[15001], sgm_tree[15000 << 2];
void calculate(int node)
{
sgm_tree[node] = sgm_tree[node << 1] + sgm_tree[(node << 1) + 1];
}
void build_sgm_tree(int node, int left, int right)
{
if(left != right)
{
int mid = (left + right) >> 1;
build_sgm_tree(node << 1, left, mid);
build_sgm_tree((node << 1) + 1, mid + 1, right);
calculate(node);
}
else
{
sgm_tree[node] = v[left];
}
}
void update(int node, int left, int right, int x, int y)
{
if(left == right)
{
sgm_tree[node] -= y;
}
else
{
int mid = (left + right) >> 1;
if(x <= mid)
update(node << 1, left, mid, x, y);
else
update((node << 1) + 1, mid + 1, right, x, y);
calculate(node);
}
}
int query(int node, int left, int right, int x, int y)
{
if(x <= left && right <= y)
return sgm_tree[node];
else
{
int mid = (left + right) >> 1;
int answer = 0;
if(x <= mid && y > mid)
answer += (query(node << 1, left, mid, x, mid) + query((node << 1) + 1, mid + 1, right, mid + 1, y));
else if(y <= mid)
answer += query(node << 1, left, mid, x, y);
else if(x > mid)
answer += query((node << 1) + 1, mid + 1, right, x, y);
return answer;
}
}
int main()
{
int i, a, b, ok;
f >> N >> M;
for(i = 1; i < N + 1; i++)
f >> v[i];
build_sgm_tree(1, 1, N);
for(i = 0; i < M; i++)
{
f >> ok >> a >> b;
if(ok)
g << query(1, 1, N, a, b) << "\n";
else
update(1, 1, N, a, b);
}
return 0;
}