#include "seats.h"
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define fall(i,a,b) for(int i=a;i<=b;i++)
#define rfall(i,a,b) for(int i=a;i>=b;i--)
#define all(x) x.begin(),x.end()
#define pb push_back
#define sz(x) (int)x.size()
#define F first
#define S second
const int MAXN=1e6+10;
typedef pair<int,int> pii;
int ans;
bool mark[MAXN];
vector<pii> v;
vector<int> mx[2],mn[2];
int f(int i){
return (mx[0][i]-mn[0][i]+1)*(mx[1][i]-mn[1][i]+1);
}
void give_initial_chart(int H, int W, std::vector<int> R, std::vector<int> C) {
v.resize(W*H);
fall(i,0,1) mx[i].resize(W*H),mn[i].resize(W*H,W*H);
fall(i,0,H*W-1){
v[i]={R[i],C[i]};
mx[0][i]=mn[0][i]=v[i].F;
mx[1][i]=mn[1][i]=v[i].S;
if(i){
fall(j,0,1) mx[j][i]=max(mx[j][i],mx[j][i-1]),mn[j][i]=min(mn[j][i],mn[j][i-1]);
}
if(f(i)==i+1) ans++,mark[i]=1;
}
return;
}
int swap_seats(int a, int b){
swap(v[a],v[b]);
if(a>b) swap(a,b);
fall(i,a,b){
ans-=(mark[i]),mark[i]=0;
mx[0][i]=mn[0][i]=v[i].F;
mx[1][i]=mn[1][i]=v[i].S;
if(i){
fall(j,0,1) mx[j][i]=max(mx[j][i],mx[j][i-1]),mn[j][i]=min(mn[j][i],mn[j][i-1]);
}
if(f(i)==i+1) ans++,mark[i]=1;
}
return ans;
}