#include <fstream>
using namespace std;
ifstream f("datorii.in");
ofstream g("datorii.out");
int n,m,v[30000],i;
int querry(int nod,int left,int right,int a, int b)
{
if(a<=left & right<=b)
return v[nod];
int middle = (left+right)/2,i1=0,i2=0;
if(a<=middle) i1=querry(2*nod,left,middle,a,b);
if(b>middle) i2=querry(2*nod+1,middle+1,right,a,b);
return i1+i2;
}
void update(int nod,int left,int right,int pos,int value,int semn)
{
if(left==right)
v[nod]+= semn*value;
else
{
int middle = (left+right)/2;
if(pos<=middle) update(2*nod,left,middle,pos,value,semn);
else update(2*nod+1,middle+1,right,pos,value,semn);
v[nod] = v[2*nod]+v[2*nod+1];
}
}
int main()
{
int a,b,c;
f>>n>>m;
for(i=1;i<=n;i++)
f>>a,update(1,1,n,i,a,1);
for(i=1;i<=m;i++)
{
f>>a>>b>>c;
if(a)
g<<querry(1,1,n,b,c)<<'\n';
else
update(1,1,n,b,c,-1);
}
return 0;
}