#include<bits/stdc++.h>
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
int n,m;
struct Aint
{
int v[400005];
void update(int node,int poz,int left,int right,int val)
{
if(left==right)
{
v[node]+=val;
return;
}
int mijl=(left+right)/2;
if(poz<=mijl)
update(2*node,poz,left,mijl,val);
else
update(2*node+1,poz,mijl+1,right,val);
v[node]=v[2*node]+v[2*node+1];
}
int query(int node,int left,int right ,int st,int dr)
{
if(dr<left||st>right)
return 0;
if(left>=st&&right<=dr)
return v[node];
int mijl=(left+right)/2;
if(right<=mijl)
return query(2*node,left,mijl,st,dr);
else
if(left>=mijl+1)
return query(2*node+1,mijl+1,right,st,dr);
else
return query(2*node,left,mijl,st,dr)+query(2*node+1,mijl+1,right,st,dr);
}
}aint;
int main()
{
int i,op,x,y;
fin>>n>>m;
for(i=1;i<=n;i++)
{
fin>>x;
aint.update(1,i,1,n,x);
}
for(i=1;i<=m;i++)
{
fin>>op>>x>>y;
if(op==1)
{
fout<<aint.query(1,1,n,x,y);
fout<<'\n';
}
else
aint.update(1,x,1,n,-y);
}
return 0;
}