#include <cstdio>
#define maxn 1<<13
int S[maxn];
int n, m;
void update(int n, int l, int r, int p, int val, int sgn)
{
S[n]+=val*sgn;
if(l>=r) return ;
int m=(l+r)>>1;
if(p<=m) update(n<<1, l, m, p,val, sgn);
else update((n<<1)|1, m+1, r, p,val,sgn);
}
int query(int n, int l, int r, int a, int b)
{
if(a<=l && b>=r) return S[n];
int m=(l+r)>>1, t=0;
if(a<=m) t+=query((n<<1), l, m, a, b);
if(b>m) t+=query((n<<1)|1, m+1, r, a, b);
return t;
}
int main()
{
freopen("datorii.in","r", stdin);
freopen("datorii.out", "w", stdout);
scanf("%d %d\n", &n, &m);
int i, t;
for(i=1;i<=n;i++) { scanf("%d ", &t); update(1, 1, n, i, t, 1);}
int p, q;
for(i=1;i<=m;i++)
{
scanf("%d %d %d\n", &t,&p, &q );
if(t==0) update(1, 1, n, p, q, -1);
else printf("%d\n", query(1, 1, n, p, q));
}
return 0;
}