#include <bits/stdc++.h>
using namespace std;
ifstream f("datorii.in");
ofstream g("datorii.out");
int n,m;
int v[100005];
long long aint[200005];
long long suma(long long a,long long b)
{
return a+b;
}
void build(int poz,int st,int dr)
{
if(st==dr)
{
aint[poz]=v[st];
return;
}
int mij=(st+dr)/2;
build(2*poz,st,mij);
build(2*poz+1,mij+1,dr);
aint[poz]=aint[2*poz]+aint[2*poz+1];
}
void update(int poz,int st,int dr,int id,int val)
{
if(st==dr)
{
aint[poz]+=val;
return;
}
int mij=(st+dr)/2;
if(id<=mij)
update(2*poz,st,mij,id,val);
else
update(2*poz+1,mij+1,dr,id,val);
aint[poz]=suma(aint[2*poz],aint[2*poz+1]);
}
int query(int poz,int st,int dr,int qst,int qdr)
{
if(qst<=st and dr<=qdr)
return aint[poz];
int mij=(st+dr)/2;
if(qst<=mij)
{
if(qdr>mij)//avem 2 de facut deci
return suma(query(2*poz,st,mij,qst,mij),query(2*poz+1,mij+1,dr,qst,qdr));
else
return query(2*poz,st,mij,qst,qdr);
}
else
return query(2*poz+1,mij+1,dr,qst,qdr);
}
int main()
{
int i,t,j,z,k=1,tip,ii,a,b;
f>>n>>m;
for(i=1;i<=n;i++)
f>>v[i];
build(1,1,n);
for(i=1;i<=m;i++)
{
f>>tip;
f>>a>>b;
if(tip==1)
{
g<<query(1,1,n,a,b)<<'\n';
}
else
{
update(1,1,n,a,-b);
}
}
return 0;
}