#include <iostream>
#include<fstream>
using namespace std;
int valori[15010],n,q;
int arbint[80001];
FILE *input;
FILE *output;
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()
{
fscanf (input, "%d %d", &n, &q);
for(int i=0; i<n; i++)
{
fscanf(input, "%d", &valori[i]);
}
}
void solve()
{
int a,b,c;
for(int i=0; i<q; i++)
{
fscanf (input, "%d %d %d", &a, &b,&c);
if(a==1)
{
fprintf(output, "%d\n", get_inv(b-1,c-1));
}
else
{
set_val(b-1,c);
}
}
}
int main()
{
input = fopen ("datorii.in", "r");
output = fopen ("datorii.out", "w");
read();
creare_arbore();
solve();
return 0;
}