#include <bits/stdc++.h>
using namespace std;
#define int long long
#define f first
#define ss second
#define ina insert
#define pb push_back
const int N=2e6;
int tree[N];
int n;
int MAX_H=1000005;
int read(int idx){
int sum=0;
while(idx>0){
sum+=tree[idx];
idx=idx-(idx&(-idx));
}
return sum;
}
void update(int idx, int val){
if(idx<=0|| idx>=MAX_H)return;
while(idx<MAX_H){
tree[idx]+=val;
idx+=(idx&(-idx));
}
}
signed main(){
int m;
cin>>n>>m;
vector<int>x(n+1);
for(int i=1; i<=n; i++){
cin>>x[i];
//update(i,1);
}
for(int i=1; i<n; i++){
int a=min(x[i], x[i+1]);
int b=max(x[i], x[i+1]);
update(a,1);
update(b+1,-1);
}
for(int q=0; q<m; q++){
int u;
cin>>u;
if(u==1){
int l,r;
cin>>l>>r;
//l--;
if(l>1){
int a=min(x[l],x[l-1]);
int b=max(x[l],x[l-1]);
update(a,-1);
update(b+1,1);
}
if(l<n){
int a=min(x[l],x[l+1]);
int b=max(x[l],x[l+1]);
update(a,-1);
update(b+1,1);
}
x[l]=r;
if(l>1){
int a=min(r,x[l-1]);
int b=max(r,x[l-1]);
update(a,1);
update(b+1,-1);
}
if(l<n){
int a=min(r,x[l+1]);
int b=max(r,x[l+1]);
update(a,1);
update(b+1,-1);
}
}
else{
int y;
cin>>y;
int bati=read(y);
cout<<bati<<endl;
}
}
}