#include <fstream>
using namespace std;
ifstream cin("datorii.in");
ofstream cout("datorii.out");
const int NMAX = 15005;
int n, m, t, a, b, arr[NMAX], tree[4 * NMAX];
void Build(int node, int left, int right)
{
if (left == right)
{
tree[node] = arr[left];
return;
}
int mid = left + (right - left) / 2;
Build(2 * node, left, mid);
Build(2 * node + 1, mid + 1, right);
tree[node] = tree[2 * node] + tree[2 * node + 1];
}
void Update(int node, int left, int right, int pos, int delta)
{
if (left == right)
{
tree[node] = max(0, tree[node] - delta);
return;
}
if (pos > right || pos < left) return;
int mid = left + (right - left) / 2;
if (pos <= mid)
Update(2 * node, left, mid, pos, delta);
else
Update(2 * node + 1, mid + 1, right, pos, delta);
tree[node] = tree[2 * node] + tree[2 * node + 1];
}
int Query(int node, int left, int right, int x, int y)
{
if (x <= left && right <= y) return tree[node];
if (x > right || y < left) return 0;
int mid = left + (right - left) / 2;
return Query(2 * node, left, mid, x, y) +
Query(2 * node + 1, mid + 1, right, x, y);
}
int main()
{
cin >> n >> m;
for (int i = 1; i <= n; i++)
cin >> arr[i];
Build(1, 1, n);
while (m--)
{
cin >> t >> a >> b;
if (t == 0)
Update(1, 1, n, a, b);
else
cout << Query(1, 1, n, a, b) << '\n';
}
cin.close();
cout.close();
return 0;
}