#include<bits/stdc++.h>
using namespace std;
const int N=3e5+10;
int fw[N],a[N],p[N],t[N],x[N],y[N];
void upd(int i,int val){for(;i<N;i+=i&-i) fw[i]+=val;}
int qry(int i){int s=0; for(;i;i-=i&-i) s+=fw[i]; return s;}
vector<int> cn;
void f(int &l,int &r){
int tl=l,tr=r;
l=lower_bound(cn.begin(),cn.end(),tl)-cn.begin();
r=lower_bound(cn.begin(),cn.end(),tr)-cn.begin();
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cn.push_back(0);
int n,m; cin>>n >>m;
for(int i=1;i<=n;i++) cin>>a[i],cn.push_back(a[i]);
for(int i=0;i<m;i++){
cin>>t[i] >>x[i];
if(t[i]>>1) cn.push_back(x[i]);
else cin>>y[i],cn.push_back(y[i]);
}
sort(cn.begin(),cn.end());
cn.erase(unique(cn.begin(),cn.end()),cn.end());
for(int i=1;i<=n;i++){
int l,r;
if(i==1) continue;
l=a[i],r=a[i-1];
if(l>r) swap(l,r);
f(l,r);
upd(l,1),upd(r+1,-1);
}
for(int i=0;i<m;i++){
if(t[i]>>1) cout<<qry(lower_bound(cn.begin(),cn.end(),x[i])-cn.begin()) <<"\n";
else{
int l,r;
if(x[i]!=1){
l=a[x[i]-1],r=a[x[i]];
if(l>r) swap(l,r);
f(l,r);
upd(l,-1),upd(r+1,1);
}
if(x[i]!=n){
l=a[x[i]],r=a[x[i]+1];
if(l>r) swap(l,r);
f(l,r);
upd(l,-1),upd(r+1,1);
}
a[x[i]]=y[i];
if(x[i]!=1){
l=a[x[i]-1],r=a[x[i]];
if(l>r) swap(l,r);
f(l,r);
upd(l,1),upd(r+1,-1);
}
if(x[i]!=n){
l=a[x[i]],r=a[x[i]+1];
if(l>r) swap(l,r);
f(l,r);
upd(l,1),upd(r+1,-1);
}
}
}
}