//#include <fstream>
//
//using namespace std;
//ifstream fin("aint.in");
//ofstream fout("aint.out");
//int v[450010],x,y,p,i,Min,n,m,Max,a[16000];
//void update(int nod,int s,int d)
//{
// if(s==d)
// {
// v[nod]=y;
// return;
// }
// else
// {
// int m=(s+d)/2;
// if(x<=m)
// update(2*nod,s,m);
// else
// update(2*nod+1,m+1,d);
//
// v[nod]=v[2*nod+1]+v[2*nod];
// }
//}
//void query(int nod,int s,int d)
//{
// if(x<=s && y>=d)
// {
// Max+=v[nod];
// }
// else
// {
// int m=(s+d)/2;
// if(x<=m)
// query(2*nod,s,m);
// if(y>=m+1)
// query(2*nod+1,m+1,d);
//
// }
//}
//int main()
//{
// fin>>n>>m;
// for(i=1; i<=n; i++)
// {
// fin>>a[i];
// y=a[i];
// x=i;
// update(1,1,n);
// }
// for(i=1; i<=m; i++)
// {
// fin>>p>>x>>y;
// if(p==0)
// {
// y=a[x]-y;
// update(1,1,n);
// }
// else
// {
// Max=0;
// query(1,1,n);
// fout<<Max<<'\n';
// }
// }
// for(i=1;i<=15;i++)
// {
// fout<<i<<" "<<v[i]<<'\n';
// }
// return 0;
//}
#include <iostream>
#include <fstream>
using namespace std;
const int MAX_N = 15001, MAX_LEN = 300020;
int N, M;
int v[MAX_N]; //datoriile initiale
int tree[MAX_LEN]; //arbore de intervale
int sum; //variabila in care retin
void build_tree(int start, int end, int node) {
if (start == end) {
tree[node] = v[start];
} else {
int midd = start + (end - start) / 2;
build_tree(start, midd, 2 * node);
build_tree(midd + 1, end, 2 * node + 1);
tree[node] = tree[2 * node] + tree[2 * node + 1];
}
}
void update_query(int start, int end, int node, int day, int value) {
if (start == end) {
tree[node] -= value;
} else {
int midd = start + (end - start) / 2;
if (day <= midd) update_query(start, midd, 2 * node, day, value);
else update_query(midd + 1, end, 2 * node + 1, day, value);
tree[node] -= value;
}
}
void sum_query(int start, int end, int node, int f_day, int l_day) {
if (f_day <= start && end <= l_day) {
sum += tree[node];
} else {
int midd = start + (end - start) / 2;
if (f_day <= midd) sum_query(start, midd, 2 * node, f_day, l_day);
if (l_day > midd) sum_query(midd + 1, end, 2 * node + 1, f_day, l_day);
}
}
int main() {
ifstream fin("datorii.in");
ofstream fout("datorii.out");
fin >> N >> M;
for (int i = 1; i <= N; i++) {
fin >> v[i];
}
build_tree(1, N, 1);
int type, x, y;
for (int i = 1; i <= M; i++) {
fin >> type >> x >> y;
if (type == 0) {
update_query(1, N, 1, x, y);
} else {
sum = 0;
sum_query(1, N, 1, x, y);
fout << sum << '\n';
}
}
fin.close();
fout.close();
return 0;
}