//Lifetime for ya
#include <cstdio>
#include <algorithm>
using namespace std;
int n, m, x, y, sum, j, val, start, fin, Arb[400104], tip;
void update1 (int nod, int st, int dr)
{
if (st==dr){
Arb[nod]=val;
return ;
}
int mij =(st+dr)/2;
if (j<=mij) update1(2*nod,st, mij);
else update1(2*nod+1, mij+1, dr);
Arb[nod]= Arb[2*nod] + Arb[2*nod+1];
}
void update (int nod, int st, int dr)
{
if (st==dr){
Arb[nod]-=val;
return ;
}
int mij =(st+dr)/2;
if (j<=mij) update(2*nod,st, mij);
else update(2*nod+1, mij+1, dr);
Arb[nod]= Arb[2*nod] + Arb[2*nod+1];
}
void query(int nod, int st, int dr)
{
if (start<=st && dr<=fin)
{
sum=sum + Arb[nod];
return ;
}
int mij=(st+dr)/2;
if (start<=mij) query(2*nod, st, mij);
if (mij<fin) query(2*nod+1, mij+1, dr);
}
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);
j=i; val=x;
update1(1,1,n);
}
for (int i=1; i<=m; i++){
scanf("%d%d%d", &tip, &x, &y);
if (tip==1){
sum=0;
start=x; fin=y;
query(1, 1, n);
printf("%d\n", sum);
}
else{
j=x; val=y;
update(1, 1, n);
}
}
return 0;
}