#include #define int long long using namespace std; const int N = 2e5 + 5; #define pii pair < int, int > #define fi first #define se second struct node { pii a, b; }p[N]; int calc ( int l, int r, int L, int R ) { l = max ( L, l ); r = min ( r, R ); if ( l > r ) return 0; return r - l + 1; } signed main ( ) { freopen ( "lucky.in", "r", stdin ); freopen ( "lucky.out", "w", stdout ); int Idc, T; cin >> Idc >> T; while ( T -- ) { int n, sum = 0; cin >> n; for ( int i = 1; i <= n; i ++ ) { int l, r; cin >> l >> r; sum += l; p[i].b = { l, r }; cin >> l >> r; p[i].a = { l, r }; } sort ( p + 1, p + n + 1, [ ] ( node x, node y ) { return x.a.fi < y.a.fi; } ); int L = 0, cnt = 0, sm = sum, R = 0; // cout << "calc\n"; for ( int i = 1; i <= n; i ++ ) { cnt += p[i].b.se; sm -= p[i].b.fi; // cout << cnt << " " << sm << "\n"; if ( cnt >= sm ) { L = p[i].a.fi; break; } } sort ( p + 1, p + n + 1, [ ] ( node x, node y ) { return x.a.se > y.a.se; } ); sm = sum; cnt = 0; for ( int i = 1; i <= n; i ++ ) { cnt += p[i].b.se; sm -= p[i].b.fi; if ( cnt > sm ) { R = p[i].a.se; break; } } if ( L > R ) { cout << 0 << "\n"; continue; } sort ( p + 1, p + n + 1, [ ] ( node x, node y ) { return x.a.fi < y.a.fi; } ); int d = 0, del = 0; for ( int i = 1; i <= n; i ++ ) { if ( d < p[i].a.fi ) del += calc ( d + 1, p[i].a.fi - 1, L, R ); d = max ( d, p[i].a.se ); } // cout << L << " " << R << "\n"; cout << R - L + 1 - del << "\n"; } } /* 0 4 2 1 2 1 1 1 1 2 2 2 1 1 1 2 1 1 2 3 2 1 2 1 2 2 3 3 4 4 1 2 1 4 3 4 1 2 3 4 2 3 3 4 3 4 0 1 2 1 1 1 2 1 1 2 3 */