#include <bits/stdc++.h>
#define dim 100001
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
int n, m;
int tree[4*dim+66];
void Update(int nod, int left, int right, int pos, int val)
{
if(left==right)
{
tree[nod]=val;
return ;
}
int mid=(left+right)/2;
if(pos<=mid)
Update(2*nod, left, mid, pos, val);
else
Update(2*nod+1, mid+1, right, pos, val);
tree[nod]=tree[2*nod]+tree[2*nod+1];
}
int Query(int nod, int left, int right, int start, int finish)
{
if(start<=left && right<=finish)
return tree[nod];
int mid=(left+right)/2, rs=0, rd=0;
if(start<=mid)
rs=Query(2*nod, left, mid, start, finish);
if(mid<finish)
rd=Query(2*nod+1, mid+1, right, start, finish);
return rs+rd;
}
int main()
{
fin>>n>>m;
for (int i=1; i<=n; i++)
{
int x;
fin>>x;
Update(1, 1, n, i, x);
}
for (int i=1; i<=m; i++)
{
int x, a, b;
fin>>x>>a>>b;
if(x==1)
fout<<Query(1, 1, n, a, b)<<'\n';
else
Update(1, 1, n, a, max(Query(1, 1, n, a, a)-b, 0));
}
return 0;
}