#include using namespace std; int binSearch(int used, vector& a, int target) { int left = -1; int right = used; while (left < right - 1) { int mid = (left + right) / 2; if (a[mid] <= target) { left = mid; } else { right = mid; } } return left; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); map map_; int n, m; cin >> n >> m; int INF = INT_MAX / 2; map_[INF] = -1; vector a(n); vector t(m); for (int i = 0; i < n; i++) { cin >> a[i]; if (map_.find(a[i]) == map_.end()) { map_[a[i]] = 0; } map_[a[i]] = map_[a[i]] + 1; } int max_ = 0; for (int i = 0; i < m; i++) { cin >> t[i]; } // 貪欲にやるのが最大にできそう for (int i = 0; i < m; i++) { auto it = map_.lower_bound(t[i]); if (it == map_.end()) break; int c = it->first; if (c == INF) break; max_ = i + 1; map_[c] = map_[c] - 1; if (map_[c] == 0) map_.erase(c); } vector l; for (int i = 0; i < max_; i++) { l.push_back(t[i]); } sort(l.begin(), l.end(), greater()); sort(a.begin(), a.end()); int left = -1; int right = 1000000001; while (left < right - 1) { int mid = (left + right) / 2; int used = n; bool ok = true; for (int i = 0; i < max_; i++) { int ind = binSearch(used, a, l[i] + mid); if (ind == -1 || a[ind] < l[i]) { ok = false; break; } used = ind; } if (ok) { right = mid; } else { left = mid; } } cout << right; return 0; }