#include <bits/stdc++.h>
#include "seats.h"
using namespace std;
#define pb push_back
std::vector<int> r,c;
const int MAXN=1e6+6;
int h,w;
set<int> rw[MAXN],co[MAXN];
void give_initial_chart(int H, int W, std::vector<int> R, std::vector<int> C) {
r=R; h=H; w=W;
c=C;
for(int i=0;i<R.size();i++){
rw[R[i]].insert(i);
co[C[i]].insert(i);
}
}
int swap_seats(int a, int b) {
if(a>b)swap(a,b);
rw[r[a]].erase(a); co[c[a]].erase(a);
rw[r[b]].erase(b); co[c[b]].erase(b);
swap(r[a],r[b]); swap(c[a],c[b]);
rw[r[a]].insert(a); co[c[a]].insert(a);
rw[r[b]].insert(b); co[c[b]].insert(b);
vector<pair<int,pair<int,bool>>> pos;
//for(int i=0;i<h && b==3;i++)cout<<*rw[i].begin()<<endl;
//for(int i=0;i<w && b==3;i++)cout<<*co[i].begin()<<endl;
for(int i=0;i<h;i++)pos.pb({*rw[i].begin(),{i,0}});
for(int i=0;i<w;i++)pos.pb({*co[i].begin(),{i,1}});
sort(pos.begin(),pos.end());
int ans=1,mnr=1e9,mxr=-1e9,mnc=1e9,mxc=-1e9;
for(int i=0;i<pos.size();i++){
// cout<<pos[i].first<<' '<<po
if(i && pos[i].first!=pos[i-1].first && (mxr-mnr+1)*(mxc-mnc+1)==pos[i].first)ans++;
if(pos[i].second.second){
mnr=min(mnr,pos[i].second.first);
mxr=max(mxr,pos[i].second.first);
}
else{
mnc=min(mnc,pos[i].second.first);
mxc=max(mxc,pos[i].second.first);
}
}
return ans;
}