#include <iostream>
#include <fstream>
using namespace std;
const int NMAX = 1e5+10;
int v[NMAX], sum=0, n;
void build(int, int, int, int, int);
void update(int, int, int, int, int);
void search_aint(int, int, int, int, int);
int main()
{
ifstream cin ("datorii.in");
ofstream cout ("datorii.out");
int m, cer, a, zi, b;
cin >> n >> m;
for (int i=0; i<n; i++)
{
cin >> a;
build(1, 1, n, a, i+1);
}
for (int i=0; i<n; i++)
{
cin >> cer >> a >> b;
if (cer == 0)
{
zi = a;
update(1, 1, n, b, zi);
}
else
{
sum = 0;
search_aint(1, 1, n, a, b);
cout << sum << '\n';
}
}
return 0;
}
void build(int nod, int st, int dr, int val, int poz)
{
if (st == dr)
{
v[nod] = val;
return;
}
int mid = (st+dr)/2;
if (poz <= mid)
{
build(2*nod, st, mid, val, poz);
}
else build(2*nod+1, mid+1, dr, val, poz);
v[nod] = v[2*nod] + v[2*nod+1];
return;
}
void update(int nod, int st, int dr, int val, int poz)
{
if (st == dr)
{
v[nod] -= val;
return;
}
int mid = (st+dr)/2;
if (poz <= mid)
{
update(2*nod, st, mid, val, poz);
}
else update(2*nod+1, mid+1, dr, val, poz);
v[nod] = v[2*nod] + v[2*nod+1];
return;
}
void search_aint(int nod, int st, int dr, int a, int b)
{
if ((a <= st) && (dr <= b))
{
sum += v[nod];
return;
}
int mid = (st+dr)/2;
if (a <= mid)
{
search_aint(2*nod, st, mid, a, b);
}
if (mid < b)
{
search_aint(2*nod+1, mid+1, dr, a, b);
}
return;
}