#include <bits/stdc++.h>
using namespace std;
ifstream f("datorii.in");
ofstream g("datorii.out");
int n,m,c,a,b,v[15005],t[30005];
void update(int nod, int a, int b, int poz, int val)
{
if ( a==b )
{
v[poz]=val;
t[nod]=val;
return;
}
int mij=(a+b)/2;
if ( mij>=poz )
update(2*nod,a,mij,poz,val);
else update(2*nod+1,mij+1,b,poz,val);
t[nod]=t[2*nod]+t[2*nod+1];
}
int query(int nod, int a, int b, int p, int q)
{
if ( a>=p && b<=q )
return t[nod];
int collect_left=0;
int collect_right=0;
int mij=(a+b)/2;
if ( mij>=p )
collect_left=query(2*nod,a,mij,p,q);
if ( mij+1<=q )
collect_right=query(2*nod+1,mij+1,b,p,q);
return (collect_right+collect_left);
}
void read()
{
f >> n >> m;
for (int i=1; i<=n; i++ )
{
f >> v[i];
update(1,1,n,i,v[i]);
}
}
int main()
{
read();
for (int i=1; i<=m; i++ )
{
f >> c >> a >> b;
if ( c==1 )
g << query(1,1,n,a,b) << '\n';
else update(1,1,n,a,v[a]-b);
}
return 0;
}