#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
const int NMAX = 15e3;
int arbint[5 * NMAX + 5];
void update(int target, int val, int st, int dr, int poz)
{
int mid = (st + dr) / 2;
arbint[poz] += val;
if (st == dr)
{
return;
}
if (target <= mid)
{
update(target, val, st, mid, poz * 2);
}
else
{
update(target, val, mid + 1, dr, poz * 2 + 1);
}
}
int query(int target_st, int target_dr, int st, int dr, int poz)
{
int s = 0;
int mid = (st + dr) / 2;
if (st >= target_st && dr <= target_dr)
{
return arbint[poz];
}
if (target_st <= mid)
{
s += query(target_st, target_dr, st, mid, poz * 2);
}
if (target_dr > mid)
{
s += query(target_st, target_dr, mid + 1, dr, poz * 2 + 1);
}
return s;
}
int func(const char* s, ...)
{
}
int main()
{
freopen("datorii.in", "r", stdin);
freopen("datorii.out" ,"w", stdout);
int n, m;
cin >> n >> m;
int x;
for (int i = 1; i <= n; ++i)
{
cin >> x;
update(i, x, 1, n, 1);
}
int y, z;
while (m--)
{
cin >> x >> y >> z;
if (!x)
{
update(y, -z, 1, n, 1);
}
else
{
cout << query(y, z, 1, n, 1) << '\n';
}
}
return 0;
}