#include <iostream>
#include <fstream>
#define MAX 20000
using namespace std;
ifstream f ("datorii.in");
ofstream g ("datorii.out");
int n,m,Start,Finish,suma,SumArb[100*MAX],Val,Pos,x;
void Form (int nod, int left, int right)
{
if (left==right)
{
SumArb[nod]=Val;
return;
}
int div=(left+right)/2;
if (Pos<=div) Form(2*nod,left, div);
else Form(2*nod+1, div+1, right);
SumArb[nod]=SumArb[2*nod]+SumArb[2*nod+1];
}
void Query(int nod, int left, int right)
{
if (left>=Start&& right<=Finish)
{
suma+=SumArb[nod];
return;
}
int div=(left+right)/2;
if (div>=Start) Query(2*nod, left, div);
if (div<Finish) Query(2*nod+1, div+1, right);
}
int FindNod(int nod, int left, int right)
{
if (left==right) return nod;
int div=(left+right)/2;
if (Pos<=div) return FindNod(2*nod, left, div);
else return FindNod(2*nod+1,div+1, right);
}
void Update(int nod, int left, int right, int x)
{
SumArb[nod]-=x;
if (left==right) return;
int div=(left+right)/2;
if (Pos<=div) Update(2*nod, left, div, x);
else Update(2*nod+1,div+1,right, x);
}
int main()
{
f>>n>>m;
for (int i=1;i<=n;i++)
{
f>>x;
Pos=i;
Val=x;
Form(1,1,n);
}
for (int i=1;i<=m;i++)
{
int p,a,b;
f>>p>>a>>b;
if (p)
{
Start=a;
Finish=b;
suma=0;
Query(1,1,n);
g<<suma<<'\n';
}
else
{
Pos=a;
Update(1,1,n,b);
}
}
return 0;
}