#include <bits/stdc++.h>
using namespace std;
ifstream f("datorii.in");
ofstream o("datorii.out");
int n, m, x;
int arb[400001];
void construireSume(int lim_st, int lim_dr, int nod, int suma, int zi)
{
if (lim_st == lim_dr)
arb[nod] = suma;
else
{
int lim_m = (lim_st+lim_dr)/2;
if (zi <= lim_m)
construireSume(lim_st,lim_m,nod*2,suma,zi);
else
construireSume(lim_m+1,lim_dr,nod*2+1,suma,zi);
arb[nod] = arb[nod*2] + arb[nod*2+1];
}
}
void schimbareSume(int lim_st, int lim_dr, int nod, int suma, int zi)
{
if (lim_st == lim_dr)
if (arb[nod] - suma < 0)
arb[nod] = 0;
else
arb[nod] -= suma;
else
{
int lim_m = (lim_st+lim_dr)/2;
if (zi <= lim_m)
schimbareSume(lim_st,lim_m,nod*2,suma,zi);
else
schimbareSume(lim_m+1,lim_dr,nod*2+1,suma,zi);
arb[nod] = arb[nod*2] + arb[nod*2+1];
}
}
int sume(int lim_st,int lim_dr, int nod, int a, int b)
{
if (a <= lim_st && lim_dr <= b)
return arb[nod];
int suma = 0;
int lim_m = (lim_st+lim_dr)/2;
if (a <= lim_m)
suma += sume(lim_st,lim_m,nod*2,a,b);
if (b > lim_m)
suma += sume(lim_m+1,lim_dr,nod*2+1,a,b);
return suma;
}
int main()
{
f>>n>>m;
for (int i = 1; i <= n; i++)
{
f>>x;
construireSume(1,n,1,x,i);
}
for (int i = 0; i < m; i++)
{
int com, a, b;
f>>com>>a>>b;
if (!com)
{
schimbareSume(1,n,1,b,a);
}
else
{
o<<sume(1,n,1,a,b)<<'\n';
}
}
}