#include <iostream>
#include <fstream>
using namespace std;
//2.100.000.000
int n,m,sum;
int arb[70000]; //15.000*4+66
void Init(int nodID, int start, int finish, int pos, int val);
void Update(int nodID, int start, int finish, int pos, int val);
void Querry(int nodID, int start, int finish, int from, int to);
int main()
{
freopen("datorii.in","r",stdin);
freopen("datorii.out","w",stdout);
scanf("%d%d",&n,&m);
int X,A,B;
for(int i = 1; i<=n; i++) {
scanf("%i",&X);
Init(1,1,n,i,X);
}
for (int i = 0;i < m; i++) {
scanf("%i %i %i",&X,&A,&B);
if (X==0) {
Update(1,1,n,A,B);
}
else {
sum = 0;
Querry(1,1,n,A,B);
printf("%i \n",sum);
}
}
fclose(stdin);
fclose(stdout);
return 0;
}
void Init(int nodID, int start, int finish, int pos, int val){
if (start==finish) {
arb[nodID] = val;
return;
}
int mid = (start + finish) /2 ;
if (pos <= mid ) {
Init(nodID*2,start,mid,pos,val);
}
else {
Init(nodID*2+1,mid+1,finish,pos,val);
}
arb[nodID] = arb[nodID*2] + arb[nodID*2+1] ;
}
void Update(int nodID, int start, int finish, int pos, int val){
if (start==finish) {
arb[nodID] = arb[nodID] - val;
return;
}
int mid = (start + finish) /2 ;
if (pos <= mid ) {
Update(nodID*2,start,mid,pos,val);
}
else {
Update(nodID*2+1,mid+1,finish,pos,val);
}
arb[nodID] = arb[nodID*2] + arb[nodID*2+1] ;
}
void Querry(int nodID, int start, int finish, int from, int to){
if (from <= start && finish <= to) {
sum += arb[nodID];
return;
}
int mid = (start + finish) /2 ;
if (from <= mid ) {
Querry(nodID*2,start,mid,from,to);
}
if (mid < to) {
Querry(nodID*2+1,mid+1,finish,from, to);
}
}