#include <bits/stdc++.h>
using namespace std;
ifstream f("datorii.in");
ofstream g("datorii.out");
const int nmax=15000;
int debt[nmax+1];
int segment_tree[nmax*4+1];
void build(int node,int left,int right)
{
if(left==right)
{
segment_tree[node]=debt[left];
}
else
{
int middle=(left+right)/2;
build(node*2,left,middle);
build(node*2+1,middle+1,right);
segment_tree[node]=segment_tree[node*2]+segment_tree[node*2+1];
}
}
void update(int node,int left,int right,int day,int value)
{
if(left==right)
{
segment_tree[node]=segment_tree[node]-value;
}
else
{
int middle=(left+right)/2;
if(day<=middle)
{
update(node*2,left,middle,day,value);
}
else
{
update(node*2+1,middle+1,right,day,value);
}
segment_tree[node]=segment_tree[node*2]+segment_tree[node*2+1];
}
}
int query(int node,int left,int right,int query_left,int query_right)
{
if(query_left<=left&&right<=query_right)
{
return segment_tree[node];
}
else
{
int middle=(left+right)/2;
if(query_right<=middle)
{
return query(node*2,left,middle,query_left,query_right);
}
if(middle+1<=query_left)
{
return query(node*2+1,middle+1,right,query_left,query_right);
}
return query(node*2,left,middle,query_left,query_right)+
query(node*2+1,middle+1,right,query_left,query_right);
}
}
int main()
{int n,q,i,op,zi,valoare,st,dr;
f>>n>>q;
for(i=1;i<=n;i++)
{
f>>debt[i];
}
build(1,1,n);
for(i=1;i<=q;i++)
{
f>>op;
if(op==0)
{
f>>zi>>valoare;
update(1,1,n,zi,valoare);
}
else
{
f>>st>>dr;
g<<query(1,1,n,st,dr)<<'\n';
}
}
return 0;
}