#include <fstream>
using namespace std;
ifstream in("datorii.in");
ofstream out("datorii.out");
const int nmax = 100001;
const int arbmax = 4*nmax + 66;
int n, m;
int A[arbmax];
int combine(int a, int b)
{
return a+b;
}
void build(int nod, int st, int dr)
{
if(st == dr)
{
in>>A[nod];
return;
}
int mij = (st + dr) >> 1;
build(2*nod, st, mij);
build(2*nod+1, mij+1, dr);
A[nod] = combine(A[nod*2], A[nod*2+1]);
}
int query(int nod, int st, int dr, int a, int b)
{
if(st == dr)
{
return A[nod];
}
int mij = (st+ dr) >> 1;
if(b <= mij)
{
return query(nod*2, st, mij, a, b);
}
if(a > mij)
{
return query(2*nod+1, mij+1, dr, a, b);
}
return combine(query(nod*2, st, mij, a, mij),
query(nod*2+1, mij+1, dr, mij+1, b));
}
void update(int nod, int st, int dr, int a, int b)
{
if(st == dr)
{
A[nod] -=b;
return;
}
int mij = (st+dr) >> 1;
if( a <= mij)
update(2*nod, st, mij, a, b);
else
update(2*nod+1, mij+1, dr, a, b);
A[nod] = combine(A[2*nod], A[2*nod+1]);
}
int q, x, y;
int main()
{
in>>n>>m;
build(1, 1, n);
for(int i=1; i<=m; i++)
{
in>>q>>x>>y;
if(q == 1)
{
out<<query(1, 1, n, x, y)<<'\n';
}
else
{
update(1, 1, n, x,y);
}
}
return 0;
}