#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream cin ("datorii.in");
ofstream cout ("datorii.out");
const int N=100001;
int n, m, xs[N], v[4*N];
void build(int ind, int st, int dr)
{
if (st == dr)
{
v[ind]=xs[st];
return;
}
int mid = (st + dr) / 2;
build(2 * ind, st, mid);
build(2 * ind + 1, mid + 1, dr);
v[ind] = v[ind*2] + v[ind*2+1];
}
int query(int ind, int st, int dr, int l, int r)
{
if (st>=l && dr<=r)
{
return v[ind];
}
if (dr<l || st>r)
{
return 0;
}
int mid=(st+dr)/2, left=query(2*ind,st,mid,l,r), right=query(2*ind+1,mid+1,dr,l,r);
return left+right;
}
void update(int ind, int st, int dr, int val, int pos)
{
if (st==dr)
{
v[ind]-=val;
return;
}
int mid=(st+dr)/2;
if (pos<=mid)
{
update(2*ind,st,mid,val,pos);
}
else
{
update(2*ind+1,mid+1,dr,val,pos);
}
v[ind]=v[2*ind]+v[2*ind+1];
}
int main()
{
cin >> n >> m;
for (int i=1; i<=n; i++)
{
cin >> xs[i];
}
build(1,1,n);
int x, a, b;
for (int i=0; i<m; i++)
{
cin >> x >> a >> b;
if (x==1)
{
cout << query(1,1,n,a,b) << '\n';
}
else
{
update(1,1,n,b,a);
}
}
return 0;
}