//#include <iostream>
#include <fstream>
#include <vector>
#define ll long long
using namespace std;
ifstream cin ("datorii.in");
ofstream cout ("datorii.out");
ll n,m,i,j,a,b,c;
vector <ll> x,y;
ll construct (ll f, ll l, ll root)
{
if (f==l)
{
x[root]=y[f];
return y[f];
}
ll middle=(f+l)/2;
x[root]=construct(f,middle,2*root)+construct(middle+1,l,2*root+1);
return x[root];
}
ll change (ll f,ll l, ll root, ll pos)
{
if (f==l)
{
ll r=x[root];
x[root]=y[pos];
return x[root]-r;
}
ll middle=(f+l)/2;
if (middle>=pos)
{
ll k=change(f,middle,2*root,pos);
x[root]+=k;
return k;
}
else
{
ll k=change(middle+1,l,2*root+1,pos);
x[root]+=k;
return k;
}
}
ll query (ll f, ll l, ll a, ll b, ll root)
{
if (a<=f&&l<=b)
{
return x[root];
}
if (b<f||l<a) return 0;
ll middle=(f+l)/2;
return query(f,middle,a,b,2*root)+query(middle+1,l,a,b,2*root+1);
}
int main()
{
cin>>n>>m;
x.resize(4*n+66);
y.reserve(n+1);
for (i=1;i<=n;++i)
{
cin>>y[i];
}
construct(1,n,1);
for (i=1;i<=m;++i)
{
cin>>a>>b>>c;
if (a==1)
{
cout<<query(1,n,b,c,1)<<"\n";
}
else
{
y[b]-=c;
change(1,n,1,b);
}
}
return 0;
}