#include #include #include #include #include #include #include #include using namespace std; using namespace atcoder; using ll = long long; using mint = modint998244353; using vi = vector; using vvi = vector; using vvvi = vector; using vll = vector; using vvll = vector; using vvvll = vector; using vmi = vector; using vvmi = vector; using vvvmi = vector; #define all(a) (a).begin(), (a).end() #define rep2(i, m, n) for (int i = (m); i < (n); ++i) #define rep(i, n) rep2(i, 0, n) #define drep2(i, m, n) for (int i = (m)-1; i >= (n); --i) #define drep(i, n) drep2(i, n, 0) void solve(){ } int main(){ set st; int n, m; cin >> n >> m; map mp, m2; vi s(n), t(m); rep(i, n){ cin >> s[i]; st.insert(s[i]); mp[s[i]]++; m2[s[i]]++; } rep(i, m){ cin >> t[i]; } int itr = 0; while(itr < m){ int mx = *prev(st.end()); if(mx < t[itr])break; auto it = st.lower_bound(t[itr]); int p = *it; mp[p]--; if(mp[p] == 0)st.erase(p); itr++; } if(itr == 0){ cout << 0 << endl; return 0; } set s2; rep(i, n)s2.insert(s[i]); int ans = 0; vi v; rep(i, itr)v.push_back(t[i]); sort(all(v)); rep(i, itr){ int p = *s2.lower_bound(v[i]); ans = max(ans, p - v[i]); m2[p]--; if(m2[p] == 0)s2.erase(p); }cout << ans << endl; return 0; }