#include <iostream>
#include <fstream>
#define MAX_VAL 15005
using namespace std;
ifstream f("datorii.in");
ofstream g("datorii.out");
int n, m, tree[4*MAX_VAL];
int update_tree(int st, int dr, int pos, int ind, int val_added)
{
if (st==dr)
{
tree[pos]+=val_added;
return val_added;
}
int mij=(st+dr)/2;
if (ind<=mij)
{
tree[pos]+=update_tree(st,mij,pos*2,ind,val_added);
}
else
{
tree[pos]+=update_tree(mij+1,dr,pos*2+1,ind,val_added);
}
return val_added;
}
int query_tree(int st, int dr, int pos, int st_query, int dr_query)
{
if (st<st_query && dr<st_query || st>dr_query && dr>dr_query)
{
return 0;
}
if(st>=st_query && dr<=dr_query)
{
return tree[pos];
}
int mij=(st+dr)/2;
return query_tree(st,mij,pos*2,st_query,dr_query)+query_tree(mij+1,dr,pos*2+1,st_query,dr_query);
}
int main() {
int tip,st,dr;
int x;
f >> n >> m;
for (int i=1; i<=n; i++)
{
f >> x;
update_tree(1,n,1,i,x);
}
for (int query=1;query<=m;++query)
{
f >> tip >> st >> dr;
if (tip==0)
{
update_tree(1,n,1,st,-dr);
}
else
{
g << query_tree(1,n,1,st,dr) << '\n';
}
}
return 0;
}