#include<cstdio>
using namespace std;
#define MAX 50000
int N , M , A[MAX] , bit , x , y ;
void update(int n , int l , int r , int x , int val);
int query(int n , int l , int r , int a , int b);
int main()
{
freopen("datorii.in" , "r" , stdin );
freopen("datorii.out" , "w" , stdout );
scanf("%d%d" , &N , &M );
for(int i = 1 ; i <= N ; ++i )
{
scanf("%d" , &x );
update(1,1,N,i,-x);
}
for(int i = 1 ; i <= M ; ++i )
{
scanf("%d%d%d" , &bit ,&x , &y);
if(!bit)update(1,1,N,x,y);
else printf("%d\n" , query(1,1,N,x,y));
}
return 0;
}
void update(int n , int l , int r , int x , int val)
{
if(l==r && l==x)
{
A[n] -= val;
return ;
}
int m = (l+r)/2;
if(x <= m)update(2*n,l,m,x,val);
else update(2*n+1,m+1,r,x,val);
A[n] = A[2*n]+A[2*n+1];
}
int query(int n , int l , int r , int a , int b)
{
if(a<=l&&b>=r)return A[n];
int m = (l+r)/2;
int sol = 0;
if(a<=m)sol+=query(2*n,l,m,a,b);
if(b>m)sol+=query(2*n+1,m+1,r,a,b);
return sol;
}