// Source: https://usaco.guide/general/io
#include <bits/stdc++.h>
using namespace std;
#define endl ' '
int n;
bool check(int x, int l, int r) {
// Check if x lies within the CIRCULAR interval [l, r]
if (r >= l)
return x >= l && x <= r;
else
return x >= l || x <= r;
}
int getS(int l, int r) {
// Normalize l and r to be within the range of the array
l = (l + n) % n;
r = (r + n) % n;
// Calculate the size of the circular interval [l, r]
if (r >= l)
return r - l + 1;
else
return n - l + r + 1;
}
int cir(int x){
if(x>=0)return x%n;
else return x+n;
}
map<int,int> s;
int ans;
void ansu(int l,int r){
ans+=getS(l,r)/2;
s[l]=r;
}
void alga(int X){
auto it=s.upper_bound(X);
if(it==s.begin()){
it=s.end();
}
it--;
int l=(*it).first,r=(*it).second;
if(check(X,l,r)){
s.erase(l);
ans-=getS(l,r)/2;
if(getS(l,r)!=2){
if(l==X){
ansu(cir(l+1),r);
}
else if(r==X){
ansu(l,cir(r-1));
}
else{
ansu(l,cir(X-1));
ansu(cir(X+1),r);
}
}
}
}
void belga(int X, int mode){
if(s.empty()){
if(mode==1)ansu(X,cir(X+1));
if(mode==2)ansu(cir(X-1),X);
if(mode==3)ansu(cir(X-1),cir(X+1));
return;
}
auto it=s.upper_bound(X);
if(mode==1){
if(it==s.end())it=s.begin();
int l=(*it).first,r=(*it).second;
if(cir(X+1)==l){
ans-=getS(l,r)/2;
s.erase(it);
ansu(X,r);
}
else{
ansu(X,cir(X+1));
}
}
if(mode==2){
if(it==s.begin())it=s.end();
it--;
int l=(*it).first,r=(*it).second;
if(cir(X-1)==r){
ans-=getS(l,r)/2;
s.erase(it);
ansu(l,X);
}
else{
ansu(cir(X-1),X);
}
}
if(mode==3){
if(it==s.end())it=s.begin();
auto itt=it;
if(it==s.begin())it=s.end();
it--;
int l2=(*itt).first,r2=(*itt).second;
int l=(*it).first,r=(*it).second;
if(cir(X-1)==r&&cir(X+1)==l2){
ans-=getS(l,r)/2;
ans-=getS(l2,r2)/2;
s.erase(it);
s.erase(itt);
ansu(l,r2);
}
else if(cir(X-1)==r){
ans-=getS(l,r)/2;
s.erase(it);
ansu(l,cir(X+1));
}
else if(cir(X+1)==l2){
ans-=getS(l2,r2)/2;
s.erase(itt);
ansu(cir(X-1),r2);
}
else ansu(cir(X-1),cir(X+1));
}
}
int main() {
int q;cin>>n>>q;
vector<int> v(n);
for(int i = 0;i<n;i++){
cin>>v[i];
}
for(int i = 0;i<n;i++){
if(v[i]<v[cir(i+1)]){
if((v[i]>v[cir(i-1)])&&s.size()){
i++;
belga(i,2);
}
else belga(i,1);
}
}
cout<<ans<<endl;
for(int i = 0;i<q;i++){
int a,b;cin>>a>>b;
alga(a);
v[a]=b;
if(v[a]<v[cir(a+1)]&&v[a]>v[cir(a-1)])belga(a,3);
else if(v[a]<v[cir(a+1)]) belga(a,1);
else if(v[a]>v[cir(a-1)]) belga(a,2);
cout<<ans<<endl;
}
}