没错又是我(
我太菜了awaawa
#include<bits/stdc++.h>
#define ll long long
#define rep(i,aaa,bbb) for(int i=(aaa);i<=(bbb);i++)
#define per(i,aaa,bbb) for(int i=(aaa);i>=(bbb);i--)
#define all(a) (a).begin(),(a).end()
#define edl cout<<endl
#define pb push_back
#define pii pair<int,int>
#define l first
#define r second
#define ptln(...) print(__VA_ARGS__,"\n")
using namespace std;
template<typename T>inline void read(T&x){cin>>x;}
template<typename T,typename...Args>inline void read(T&x,Args&...args){read(x);read(args...);}
template<typename T>inline void print(const T&x){cout<<x;}
template<typename T,typename...Args>inline void print(const T&x,Args&&...args){cout<<x<<" ";print(args...);}
constexpr int inf=0x7fffffff;
constexpr int maxx=1e5+6e4+2;
constexpr int maxy=1e5+2;
constexpr int miny=-6e4-2;
int n,q;
#define mid ((l+r)>>1)
struct Segmenty{
#define lson ls[x],l,mid
#define rson rs[x],mid+1,r
vector<int> a=vector<int>(2),ls=vector<int>(2),rs=vector<int>(2);
void update(int x){
a[x]=a[ls[x]]+a[rs[x]];
}
int insert(int x,int l,int r,int q){
if(!x)x=a.size(),a.pb(0),ls.pb(0),rs.pb(0);
if(l==r&&r==q){a[x]++;return x;}
int p;
if(q<=mid){
p=insert(lson,q);
ls[x]=p;
}
if(q>mid){
p=insert(rson,q);
rs[x]=p;
}
update(x);
return x;
}
int query(int x,int l,int r,int lq,int rq){
if(!x)return 0;
if(l>=lq&&r<=rq)return a[x];
int ans=0;
if(lq<=mid)ans+=query(lson,lq,rq);
if(rq>mid)ans+=query(rson,lq,rq);
return ans;
}
};
struct Segmentx{
Segmenty a[maxx<<2];
#define lsn x<<1,l,mid
#define rsn x<<1|1,mid+1,r
void insert(int x,int l,int r,int q,int y){
if(l==r&&r==q){
a[x].insert(1,miny,maxy,y);
return;
}
if(q<=mid)insert(lsn,q,y);
if(q>mid)insert(rsn,q,y);
a[x].insert(1,miny,maxy,y);
}
int query(int x,int l,int r,int lq,int rq,int ly,int ry){
if(l>=lq&&r<=rq){
return a[x].query(1,miny,maxy,ly,ry);
}
int ans=0;
if(lq<=mid)ans+=query(lsn,lq,rq,ly,ry);
if(rq>mid)ans+=query(rsn,lq,rq,ly,ry);
return ans;
}
}T;
int a[100002];
int main(){ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);
read(n,q);
rep(i,1,n){
read(a[i]);
T.insert(1,1,maxx,i+a[i],a[i]-i);
}
while(q--){
string op;int x,k;
read(op,x,k);
if(op=="Query"){
ptln(T.query(1,1,maxx,max(x+a[x]-k,1),min(x+a[x]+k,maxx),max(a[x]-x-k,miny),min(a[x]-x+k,maxy)));
}
else{
a[x]=k;
T.insert(1,1,maxx,k+x,k-x);
}
}
return 0;
}
/*
3 5
2 4 3
Query 2 2
Modify 1 3
Query 2 2
Modify 1 2
Query 1 1
*/