#include <bits/stdc++.h>
using namespace std;
int ans;
void solve(int l, int r, int pl, int pr, int dep) {
  if (l > r || pl > pr) return;
  if (l >= pl && r <= pr) {
    ans = ((ans) > (r - l + 1) ? (ans) : (r - l + 1));
    return;
  }
  if (pl >= l && pr <= r) {
    ans = ((ans) > (pr - pl + 1) ? (ans) : (pr - pl + 1));
    return;
  }
  if (l > pl) {
    swap(l, pl), swap(r, pr);
  }
  int w = (1 << dep);
  if (pl > w) return solve(l, r, pl - w, pr - w, dep);
  if (l > w) return solve(l - w, r - w, pl, pr, dep);
  if (pr < w && r < w) return solve(l, r, pl, pr, dep - 1);
  ans = ((ans) > (((pr) < (r) ? (pr) : (r)) - ((l) > (pl) ? (l) : (pl)) + 1)
             ? (ans)
             : (((pr) < (r) ? (pr) : (r)) - ((l) > (pl) ? (l) : (pl)) + 1));
  solve(l, r, pl, w - 1, dep);
  solve(l, r, w + 1, pr, dep);
}
int main() {
  ans = 0;
  int l, r, pl, pr;
  scanf("%d%d%d%d", &l, &r, &pl, &pr);
  solve(l, r, pl, pr, 30);
  printf("%d\n", ans);
}
