#include <stdio.h>
using namespace std;
FILE *f=fopen("datorii.in","r");
FILE *g=fopen("datorii.out","w");
long long n,m,v[300000],i;
int querry(int nod,int left,int right,int a, int b)
{
if(a<=left & right<=b)
return v[nod];
long long 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,j;
fscanf(f,"%d%d",&n,&m);
for(i=1;i<=n;i++)
fscanf(f,"%d",&a),update(1,1,n,i,a,1);
for(i=1;i<=m;i++)
{
fscanf(f,"%d%d%d",&a,&b,&c);
if(a)
fprintf(g,"%d\n",querry(1,1,n,b,c));
else
update(1,1,n,b,c,-1);
}
/*fscanf(f,"%d%d",&n,&m);
for(i=1;i<=n;i++)
fscanf(f,"%d",&v[i]);
for(i=1;i<=m;i++)
{
fscanf(f,"%d%d%d",&a,&b,&c);
if(a)
{
int suma = 0;
for(j=b;j<=c;j++)
suma+=v[j];
fprintf(g,"%d\n",suma);
}
else
v[b]-=c;
}
*/
return 0;
}