#include<bits/stdc++.h>
using namespace std;
using i128=__int128;
using u128=unsigned __int128;
using i64=long long;
using u64=unsigned long long;
using i32=int;
using u32=unsigned int;
using i16=short;
using u16=unsigned short;
using i8=char;
using u8=unsigned char;
using pii=pair<int,int>;
template<typename T>
inline void read(T& v){
v=0;
char c=getchar();
while(c<'0'||c>'9'){
c=getchar();
}
while(c>='0'&&c<='9'){
v*=10;
v+=c-'0';
c=getchar();
}
}
template<typename T>
inline void write_(T v){
if(v==0){
return;
}
write_(v/10);
putchar((v%10)+'0');
}
template<typename T>
inline void write(T v){
if(v==0){
putchar('0');
return;
}
write_(v);
}
template<typename T>
inline void writeln(T v){
write(v);
putchar('\n');
}
int al[200010][2];
int bl[200010][2];
struct Node;
Node* alloc();
struct Node{
Node* child;
i64 val[2];
Node(){
};
inline void clear(){
child=NULL;
val[0]=0;
val[1]=0;
}
inline void push_down(){
if(child==NULL){
child=alloc();
alloc();
}
for(int i=0;i<2;i++){
for(int j=0;j<2;j++){
child[i].val[j]+=val[j];
}
}
for(int j=0;j<2;j++){
val[j]=0;
}
}
};
Node pool[17476266];
int pool_top=0;
inline Node* alloc(){
pool[pool_top].clear();
return &pool[pool_top++];
}
Node* root;
const int E9=1000000000;
const int E91=E9+1;
void range_add_p2(Node* cur,int l,int r,int ql,int qr,int val1,int val2){
if(l>=ql&&r<=qr){
cur->val[0]+=val1;
cur->val[1]+=val2;
return;
}
if(l>=qr||r<=ql){
return;
}
cur->push_down();
int mid=(l+r)>>1;
range_add_p2(cur->child,l,mid,ql,qr,val1,val2);
range_add_p2(cur->child+1,mid,r,ql,qr,val1,val2);
}
inline void range_add_p2(int ql,int qr,int val1,int val2){
return range_add_p2(root,0,E91,ql,qr,val1,val2);
}
i64* get_val(Node* cur,int l,int r,int pos){
if(cur->child==NULL){
return cur->val;
}
cur->push_down();
int mid=(l+r)>>1;
if(pos>=mid){
return get_val(cur->child+1,mid,r,pos);
}else{
return get_val(cur->child,l,mid,pos);
}
}
inline i64* get_val(int pos){
return get_val(root,0,E91,pos);
}
inline bool checkl(int p){
i64* v=get_val(p);
return v[0]>=0;
}
inline bool checkr(int p){
i64* v=get_val(p);
return v[1]>0;
}
pii arr[200010];
void task(){
int n;
read(n);
for(int i=1;i<=n;i++){
read(al[i][0]);
read(al[i][1]);
read(bl[i][0]);
read(bl[i][1]);
}
pool_top=0;
root=alloc();
for(int i=1;i<=n;i++){
range_add_p2(bl[i][1]+1,E91,al[i][1],-al[i][0]);
range_add_p2(bl[i][0],bl[i][1]+1,al[i][1],al[i][1]);
range_add_p2(1,bl[i][0],-al[i][0],al[i][1]);
}
int rl=0;
int rr=0;
int l=1;
int r=E9;
while(l<r){
int mid=(l+r)>>1;
if(checkl(mid)){
r=mid;
}else{
l=mid+1;
}
}
rl=l;
l=1;
r=E9;
while(l<r){
int mid=(l+r+1)>>1;
if(checkr(mid)){
l=mid;
}else{
r=mid-1;
}
}
rr=l;
for(int i=1;i<=n;i++){
arr[i-1]={bl[i][0],bl[i][1]};
}
sort(arr,arr+n);
int res=0;
int lst=rl-1;
for(int i=0;i<n;i++){
pii v=arr[i];
int l=max(lst+1,v.first);
int r=min(v.second,rr);
if(r>=l){
res+=r-l+1;
lst=r;
}
}
writeln(res);
}
int main(){
freopen("lucky.in","r",stdin);
freopen("lucky.out","w",stdout);
int c,t;
read(c);
read(t);
for(int i=0;i<t;i++){
task();
}
fclose(stdin);
fclose(stdout);
return 0;
}