#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
struct Seg{
	int t[800005],tag[800005];
	Seg(){
		memset(t,0x3f,sizeof(t));
		memset(tag,0x3f,sizeof(tag));
	}
	void Tag(int p,int k){
		t[p]=min(t[p],k),tag[p]=min(tag[p],k);
	}
	void Pushdown(int p){
    	if(tag[p]!=0x3f3f3f3f)Tag(2*p,tag[p]),Tag(2*p+1,tag[p]),tag[p]=0x3f3f3f3f;
	}
	void Upd(int p,int l,int r,int x,int y,int z){
		if(x<=l&&r<=y)return Tag(p,z);
		int mid=(l+r)/2;
		Pushdown(p);
		if(x<=mid)Upd(p*2,l,mid,x,y,z);
		if(mid<y)Upd(p*2+1,mid+1,r,x,y,z);
	}
	int Q(int p,int l,int r,int x){
		if(l==r)return t[p];
		int mid=(l+r)/2;
		Pushdown(p);
		if(x<=mid)return Q(p*2,l,mid,x);
		else return Q(p*2+1,mid+1,r,x);
	}
}sheng,sshu;
ll ans=0;
int n,q;
int main(){
	cin>>n>>q;
	ans=1ll*(n-2)*(n-2);
	sheng.Upd(1,1,n,1,n,n),sshu.Upd(1,1,n,1,n,n);
	while(q--){
		int opt,x;
		cin>>opt>>x;
		if(opt==1){
			int u=sheng.Q(1,1,n,x);
			ans-=max(u-2,0);
			sshu.Upd(1,1,n,1,u-1,x);
		}
		else {
			int u=sshu.Q(1,1,n,x);
			ans-=max(u-2,0);
			sheng.Upd(1,1,n,1,u-1,x);
		}
	}
	cout<<ans;
}