#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 7;
int n,m,a[N];
struct node
{
int leftVal,rightVal;
int incLeft, incRight;
int fluctLeft, fluctRight;
int len,best;
} st[4*N];
node Merge(node a, node b)
{
int Best = max(a.best,b.best);
// update inc subse
// cout << "GG " << b.incLeft << ' ' << b.fluctLeft << ' ' << a.fluctLeft << endl;
int incR = b.incRight, incL = a.incLeft;
if(a.rightVal < b.leftVal && b.incRight == b.len) {
incR = a.incRight + b.len;
}
if(a.rightVal > b.leftVal && a.incLeft == a.len) {
incL = b.incLeft + a.len;
}
// update best
// case 1 converge
if(a.rightVal > b.leftVal || a.rightVal < b.leftVal)
{
Best = max(Best,a.incRight+b.incLeft);
}
// case2 continue
int fluctL = max(a.fluctLeft,a.incLeft), fluctR = (b.fluctRight,b.incRight);
if(a.rightVal > b.leftVal || a.rightVal < b.leftVal)
{
if(b.len == b.incLeft) fluctR = max(fluctR,a.incRight + b.incLeft);
if(a.len == a.incRight) fluctL = max(fluctL,a.incRight + b.incLeft);
if(a.len == a.fluctLeft && a.rightVal > b.leftVal) fluctL = max(fluctL,a.fluctLeft + b.incLeft);
if(b.len == b.fluctRight && a.rightVal < b.leftVal) fluctR = max(fluctL,b.fluctRight + a.incRight);
}
if(a.fluctRight != 0 && a.rightVal > b.leftVal) {
Best = max(Best,a.fluctRight+b.incLeft);
if(b.incLeft == b.len) fluctR = max(fluctR,a.fluctRight+b.incLeft);
}
if(b.fluctLeft != 0 && a.rightVal < b.leftVal) {
Best = max(Best,b.fluctLeft+a.incRight);
if(a.incRight == a.len) fluctL = max(fluctL,b.fluctLeft+a.incRight);
}
Best = max({Best,fluctR,fluctL});
//
return {a.leftVal,b.rightVal,
incL,incR,
fluctL,fluctR,
a.len+b.len,Best};
}
void build(int id, int l, int r)
{
if(l > r) return;
if(l == r){
st[id] = {a[l],a[l],1,1,0,0,1,0};
return;
}
int mid = (l+r)/2;
build(2*id,l,mid);
build(2*id+1,mid+1,r);
st[id] = Merge(st[2*id],st[2*id+1]);
}
void update(int id, int l, int r, int u)
{
if(l > u || r < u) return;
if(l == r)
{
st[id] = {a[l],a[l],1,1,0,0,1,0};
return;
}
int mid = (l+r)/2;
update(2*id,l,mid,u);
update(2*id+1,mid+1,r,u);
st[id] = Merge(st[2*id],st[2*id+1]);
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin >> n >> m;
for(int i = 1; i <= n; i++) cin >> a[i];
build(1,1,n);
// cout << st[1].best << endl;
for(int i = 1; i <= m; i++)
{
int x,y; cin >> x >> y;
a[x] = y;
update(1,1,n,x);
cout << st[1].best <<'\n';
}
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKY29uc3QgaW50IE4gPSAxZTUgKyA3OwppbnQgbixtLGFbTl07CnN0cnVjdCBub2RlCnsKICAgIGludCBsZWZ0VmFsLHJpZ2h0VmFsOwogICAgaW50IGluY0xlZnQsIGluY1JpZ2h0OwogICAgaW50IGZsdWN0TGVmdCwgZmx1Y3RSaWdodDsKICAgIGludCBsZW4sYmVzdDsKfSBzdFs0Kk5dOwpub2RlIE1lcmdlKG5vZGUgYSwgbm9kZSBiKQp7CiAgICBpbnQgQmVzdCA9IG1heChhLmJlc3QsYi5iZXN0KTsKICAgIC8vIHVwZGF0ZSBpbmMgc3Vic2UKIC8vICAgY291dCA8PCAiR0cgIiA8PCBiLmluY0xlZnQgPDwgJyAnIDw8ICBiLmZsdWN0TGVmdCA8PCAnICcgPDwgYS5mbHVjdExlZnQgPDwgZW5kbDsKICAgIGludCBpbmNSID0gYi5pbmNSaWdodCwgaW5jTCA9IGEuaW5jTGVmdDsKICAgIGlmKGEucmlnaHRWYWwgPCBiLmxlZnRWYWwgJiYgYi5pbmNSaWdodCA9PSBiLmxlbikgewogICAgICAgIGluY1IgPSBhLmluY1JpZ2h0ICsgYi5sZW47CiAgICB9CiAgICBpZihhLnJpZ2h0VmFsID4gYi5sZWZ0VmFsICYmIGEuaW5jTGVmdCA9PSBhLmxlbikgewogICAgICAgIGluY0wgPSBiLmluY0xlZnQgKyBhLmxlbjsKICAgIH0KICAgIC8vIHVwZGF0ZSBiZXN0CiAgICAvLyBjYXNlIDEgY29udmVyZ2UKICAgIGlmKGEucmlnaHRWYWwgPiBiLmxlZnRWYWwgfHwgYS5yaWdodFZhbCA8IGIubGVmdFZhbCkKICAgIHsKICAgICAgICBCZXN0ID0gbWF4KEJlc3QsYS5pbmNSaWdodCtiLmluY0xlZnQpOwogICAgfQogICAgLy8gY2FzZTIgY29udGludWUKICAgIGludCBmbHVjdEwgPSBtYXgoYS5mbHVjdExlZnQsYS5pbmNMZWZ0KSwgZmx1Y3RSID0gKGIuZmx1Y3RSaWdodCxiLmluY1JpZ2h0KTsKICAgIGlmKGEucmlnaHRWYWwgPiBiLmxlZnRWYWwgfHwgYS5yaWdodFZhbCA8IGIubGVmdFZhbCkKICAgIHsKICAgICAgICBpZihiLmxlbiA9PSBiLmluY0xlZnQpIGZsdWN0UiA9IG1heChmbHVjdFIsYS5pbmNSaWdodCArIGIuaW5jTGVmdCk7CiAgICAgICAgaWYoYS5sZW4gPT0gYS5pbmNSaWdodCkgZmx1Y3RMID0gbWF4KGZsdWN0TCxhLmluY1JpZ2h0ICsgYi5pbmNMZWZ0KTsKICAgICAgICBpZihhLmxlbiA9PSBhLmZsdWN0TGVmdCAmJiBhLnJpZ2h0VmFsID4gYi5sZWZ0VmFsKSBmbHVjdEwgPSBtYXgoZmx1Y3RMLGEuZmx1Y3RMZWZ0ICsgYi5pbmNMZWZ0KTsKICAgICAgICBpZihiLmxlbiA9PSBiLmZsdWN0UmlnaHQgJiYgYS5yaWdodFZhbCA8IGIubGVmdFZhbCkgZmx1Y3RSID0gbWF4KGZsdWN0TCxiLmZsdWN0UmlnaHQgKyBhLmluY1JpZ2h0KTsKICAgIH0KICAgIGlmKGEuZmx1Y3RSaWdodCAhPSAwICYmIGEucmlnaHRWYWwgPiBiLmxlZnRWYWwpIHsKICAgICAgICAgICAgQmVzdCA9IG1heChCZXN0LGEuZmx1Y3RSaWdodCtiLmluY0xlZnQpOwogICAgICAgICAgICBpZihiLmluY0xlZnQgPT0gYi5sZW4pIGZsdWN0UiA9IG1heChmbHVjdFIsYS5mbHVjdFJpZ2h0K2IuaW5jTGVmdCk7CiAgICB9CiAgICBpZihiLmZsdWN0TGVmdCAhPSAwICYmIGEucmlnaHRWYWwgPCBiLmxlZnRWYWwpIHsKICAgICAgICBCZXN0ID0gbWF4KEJlc3QsYi5mbHVjdExlZnQrYS5pbmNSaWdodCk7CiAgICAgICAgaWYoYS5pbmNSaWdodCA9PSBhLmxlbikgZmx1Y3RMID0gbWF4KGZsdWN0TCxiLmZsdWN0TGVmdCthLmluY1JpZ2h0KTsKICAgIH0KICAgIEJlc3QgPSBtYXgoe0Jlc3QsZmx1Y3RSLGZsdWN0TH0pOwogICAgLy8KICAgIHJldHVybiB7YS5sZWZ0VmFsLGIucmlnaHRWYWwsCiAgICAgICAgICAgIGluY0wsaW5jUiwKICAgICAgICAgICAgZmx1Y3RMLGZsdWN0UiwKICAgICAgICAgICAgYS5sZW4rYi5sZW4sQmVzdH07Cn0Kdm9pZCBidWlsZChpbnQgaWQsIGludCBsLCBpbnQgcikKewogICAgaWYobCA+IHIpIHJldHVybjsKICAgIGlmKGwgPT0gcil7CiAgICAgICAgc3RbaWRdID0ge2FbbF0sYVtsXSwxLDEsMCwwLDEsMH07CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgaW50IG1pZCA9IChsK3IpLzI7CiAgICBidWlsZCgyKmlkLGwsbWlkKTsKICAgIGJ1aWxkKDIqaWQrMSxtaWQrMSxyKTsKICAgIHN0W2lkXSA9IE1lcmdlKHN0WzIqaWRdLHN0WzIqaWQrMV0pOwoKfQp2b2lkIHVwZGF0ZShpbnQgaWQsIGludCBsLCBpbnQgciwgaW50IHUpCnsKICAgIGlmKGwgPiB1IHx8IHIgPCB1KSByZXR1cm47CiAgICBpZihsID09IHIpCiAgICB7CiAgICAgICAgc3RbaWRdID0ge2FbbF0sYVtsXSwxLDEsMCwwLDEsMH07CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgaW50IG1pZCA9IChsK3IpLzI7CiAgICB1cGRhdGUoMippZCxsLG1pZCx1KTsKICAgIHVwZGF0ZSgyKmlkKzEsbWlkKzEscix1KTsKICAgIHN0W2lkXSA9IE1lcmdlKHN0WzIqaWRdLHN0WzIqaWQrMV0pOwp9CmludCBtYWluKCkKewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsKICAgIGNpbi50aWUoMCk7Y291dC50aWUoMCk7CiAgICBjaW4gPj4gbiA+PiBtOwogICAgZm9yKGludCBpID0gMTsgaSA8PSBuOyBpKyspIGNpbiA+PiBhW2ldOwogICAgYnVpbGQoMSwxLG4pOwogIC8vICBjb3V0IDw8IHN0WzFdLmJlc3QgPDwgZW5kbDsKICAgIGZvcihpbnQgaSA9IDE7IGkgPD0gbTsgaSsrKQogICAgewogICAgICAgIGludCB4LHk7IGNpbiA+PiB4ID4+IHk7CiAgICAgICAgYVt4XSA9IHk7CiAgICAgICAgdXBkYXRlKDEsMSxuLHgpOwogICAgICAgIGNvdXQgPDwgc3RbMV0uYmVzdCA8PCdcbic7CiAgICB9Cn0K