#include // #include // #include // #include // #include // #include // using namespace atcoder; using namespace std; using ll = long long; using ull = unsigned long long; template using max_heap = priority_queue; template using min_heap = priority_queue, greater<>>; ll ll_min = numeric_limits::min(); ll ll_max = numeric_limits::max(); ll ALPHABET_N = 26; // using mint = modint998244353; #define rep(i, n) for (ll i = (ll)0; i < (ll)n; i++) #define rep_(i, k, n) for (ll i = (ll)k; i < (ll)n; i++) #define all(a) a.begin(), a.end() int main() { ios::sync_with_stdio(false); cin.tie(nullptr); ll n, m; cin >> n >> m; vector S(n); vector T(m); rep(i, n) cin >> S[i]; rep(i, m) cin >> T[i]; ll new_m = 0; { multiset st(all(S)); rep(i, m) { ll t = T[i]; auto it = st.lower_bound(t); if (it == st.end()) break; new_m++; st.erase(it); } } while (T.size() != new_m) T.pop_back(); sort(all(S)); sort(all(T)); ll ti = 0; ll ans = 0; rep(i, n) { if (ti >= T.size()) break; if (T[ti] <= S[i]) { ans = max(ans, S[i] - T[ti++]); } } cout << ans << endl; return 0; }