#include <iostream>
#include<fstream>
using namespace std;
ifstream in("datorii.in");
ofstream out("datorii.out");
int valori[15000],n,q;
int arbint[30001];
void create(int index,int l,int r)
{
if(l==r)
{
arbint[index]=valori[l];
}
else
{
int mid=(l+r)/2;
create(index<<1,l,mid);
create((index<<1)+1,mid+1,r);
arbint[index]=arbint[index<<1]+arbint[(index<<1)+1];
}
}
int srch(int l,int r,int a,int b,int index)
{
if(l>= a&&r<=b)
{
return arbint[index];
}
else
{
int mid=(l+r)/2;
int sum=0;
if(a<=mid)
{
sum+=srch(l,mid,a,b,index<<1);
}
if(b>mid)
{
sum+=srch(mid+1,r,a,b,(index<<1)+1);
}
return sum;
}
}
void setv(int l,int r,int val,int ind,int index)
{
if(l==r)
{
arbint[index]-=val;
}
else
{
int middle=(l+r)/2;
if(ind<=middle)
{
setv(l,middle,val,ind,index<<1);
}
else
{
setv(middle+1,r,val,ind,(index<<1)+1);
}
arbint[index]=arbint[index<<1]+arbint[(index<<1)+1];
}
}
void creare_arbore()
{
create(1,0,n-1);
}
int get_inv(int a,int b)
{
return srch(0,n-1,a,b,1);
}
void set_val(int index,int value)
{
setv(0,n-1,value,index,1);
}
void read()
{
in>>n>>q;
for(int i=0; i<n; i++)
{
in>>valori[i];
}
}
void solve()
{
int a,b,c;
for(int i=0; i<q; i++)
{
in>>a>>b>>c;
if(a==1)
{
out<<get_inv(b-1,c-1)<<'\n';
}
else
{
set_val(b-1,c);
}
}
}
int main()
{
read();
creare_arbore();
solve();
return 0;
}