#pragma GCC optimize("Ofast,unroll-loops") #pragma GCC target("avx,avx2,sse,sse2,sse3,fma") #include using namespace std; #define ll long long #define fi first #define se second #define pb emplace_back #define all(n) (n).begin(),(n).end() #define mem(n,x) memset(n,x,sizeof(n)) #define IOS ios::sync_with_stdio(0),cin.tie(0) #define pii pair #define vi vector #define dbg(...) cerr<<#__VA_ARGS__<<" = ";_do(__VA_ARGS__); #define int ll template void _do(A x){ cerr< void _do(A x, B ...y){ cerr< y.fi || x.se > y.se) return -100; return (y.fi - x.fi) * (y.se - x.se); } signed main(){ IOS; cin>>n>>m; deque sell(n), buy(m); for(int i=0;i>sell[i].fi>>sell[i].se; } for(int i=0;i>buy[i].fi>>buy[i].se; } sort(all(sell)); sort(all(buy)); deque tmp; for(auto i:sell){ if(tmp.size() && i.se > tmp.back().se) continue; tmp.pb(i); } sell = tmp; tmp.clear(); for(auto i:buy){ while(tmp.size() && i.se > tmp.back().se) tmp.pop_back(); tmp.pb(i); } buy = tmp; deque dq; while(!sell.empty() && !buy.empty() && area(sell[0],buy[0]) <= 0){ if(sell[0].fi >= buy[0].fi) buy.pop_front(); else if(sell[0].se >= buy[0].se) sell.pop_front(); else assert(false); } /* for(auto i:sell) cout<= cura) l = m + 1; else r = m; } if(l < buy.size() && area(sell[i], buy[l]) > 0) dq.pb(i,l); } } /* for(auto i:dq) cout<= 2 && dq[1].se <= i) dq.pop_front(); /* dbg(dq[0].fi, i); */ ans = max(ans, area(sell[dq[0].fi], buy[i])); } cout<