#include <cstdio>
#include <algorithm>
#define NMAX 1000007
using namespace std;
int n, m, Ans, Arbint[NMAX];
void update(int Nod, int st, int dr, int poz, int Val){
if(st == dr){
Arbint[Nod] += Val;
return;
}
int med = (st + dr) >> 1;
if(med >= poz)
update(Nod * 2, st, med, poz, Val);
else
update(Nod * 2 + 1, med + 1, dr, poz, Val);
Arbint[Nod] = Arbint[Nod * 2] + Arbint[Nod * 2 + 1];
}
void query(int Nod, int st, int dr, int x, int y){
if(st >= x && dr <= y){
Ans += Arbint[Nod];
return;
}
int med = (st + dr) >> 1;
if(med >= x)
query(Nod * 2, st, med, x, y);
if(med < y)
query(Nod * 2 + 1, med + 1, dr, x, y);
}
int main(){
freopen("datorii.in", "r", stdin);
freopen("datorii.out", "w", stdout);
scanf("%d %d", &n, &m);
for(int i = 1; i <= n; ++i){
int a;
scanf("%d", &a);
update(1, 1, n, i, a);
}
for(int i = 1; i <= m; ++i){
int Tip, a, b;
scanf("%d %d %d", &Tip, &a, &b);
if(Tip == 1){
Ans = 0;
query(1, 1, n, a, b);
printf("%d\n", Ans);
}
else
update(1, 1, n, a, -b);
}
return 0;
}