#include<bits/stdc++.h>
using namespace std;
const long long maxn=1e6+9e5;
struct segment{
long long tree[maxn*4],lazy[maxn*4];
void init(int id,int l,int r){
tree[id]=0,lazy[id]=0;
if(l==r) return ;
int mid=(l+r)/2;
init(id*2,l,mid);
init(id*2+1,mid+1,r);
}
void pushdown(int id,int l,int r){
if(lazy[id]){
int mid=(l+r)/2;
lazy[id*2]+=lazy[id],lazy[id*2+1]+=lazy[id];
tree[id*2]+=lazy[id],tree[id*2+1]+=lazy[id]*(r-mid);
lazy[id]=0;
}
}
void change(int id,int l,int r,int x,int y,long long k){
if(x>y) return ;
if(x<=l&&r<=y){
tree[id]+=k;
lazy[id]+=k;
return ;
}
pushdown(id,l,r);
int mid=(l+r)/2;
if(x<=mid) change(id*2,l,mid,x,y,k);
if(mid<y) change(id*2+1,mid+1,r,x,y,k);
}
long long query(int id,int l,int r,int x){
if(l==r&&r==x) {
return tree[id];
}
pushdown(id,l,r);
int mid=(l+r)/2;
if(x<=mid) return query(id*2,l,mid,x);
if(mid<x) return query(id*2+1,mid+1,r,x);
}
}T1,T2,T3,T4,T5;
struct node{
int l1,r1,l2,r2;
}s[maxn];
int n;
int ls[maxn];
void rmain(){
cin>>n;
int cnt=0;
for(int i=1;i<=n;i++) {
scanf("%d%d%d%d",&s[i].l1,&s[i].r1,&s[i].l2,&s[i].r2);
ls[cnt]=s[i].l2,cnt++;
ls[cnt]=s[i].r2,cnt++;
}
ls[cnt]=2e9;
sort(ls,ls+cnt);
int ncnt=unique(ls,ls+cnt)-ls;
int zd=(ncnt-1)*2+1;
for(int i=1;i<=n;i++){
s[i].l2=lower_bound(ls,ls+ncnt,s[i].l2)-ls;
s[i].r2=lower_bound(ls,ls+ncnt,s[i].r2)-ls;
s[i].l2*=2,s[i].r2*=2;
s[i].l2+=1,s[i].r2+=1;
T1.change(1,1,zd,s[i].l2,s[i].r2,s[i].r1);
T2.change(1,1,zd,1,s[i].l2-1,s[i].r1);
T3.change(1,1,zd,1,s[i].l2-1,s[i].l1);
T4.change(1,1,zd,s[i].r2+1,zd,s[i].r1);
T5.change(1,1,zd,s[i].r2+1,zd,s[i].l1);
}
long long b,a1,a2,c1,c2;
int ans=0;
for(int i=1;i<=zd;i++){
if(i%2==0){
if(ls[i/2]-ls[i/2-1]==1){
continue;
}
}
b=T1.query(1,1,zd,i);
if(b==0) continue;
c2=T2.query(1,1,zd,i);
c1=T3.query(1,1,zd,i);
a2=T4.query(1,1,zd,i);
a1=T5.query(1,1,zd,i);
if(a1>c2||a2<c1){
if(a1>c2){
if(b>a1-c2) {
if(i%2==1){
ans++;
}else {
if(ls[i/2]-ls[i/2-1]!=1){
ans+=ls[i/2]-ls[i/2-1]-1;
}
}
}
}else if(a2<c1){
if(b>=c1-a2){
if(i%2==1){
ans++;
}else {
if(ls[i/2]-ls[i/2-1]!=1){
ans+=ls[i/2]-ls[i/2-1]-1;
}
}
}
}
}else {
if(i%2==1){
ans++;
}else {
if(ls[i/2]-ls[i/2-1]!=1){
ans+=ls[i/2]-ls[i/2-1]-1;
}
}
}
}
T1.init(1,1,zd),T2.init(1,1,zd),T3.init(1,1,zd),T4.init(1,1,zd),T5.init(1,1,zd);
cout<<ans<<endl;
}
int main(){
freopen("lucky.in","r",stdin);
freopen("lucky.out","w",stdout);
int c,T;
cin>>c>>T;
while(T--){
rmain();
}
return 0;
}