#include <bits/stdc++.h>
using namespace std;
long long int power(long long int b, long long int e) {
  if (e == 0) return 1;
  if (e % 2)
    return b * power(b * b, (e - 1) / 2);
  else
    return power(b * b, e / 2);
}
void dpv(vector<long long int> v) {
  for (long long int i = 0; i < v.size(); i++) {
    cout << v[i] << " ";
  }
  cout << '\n';
}
void dpv(vector<pair<long long int, long long int> > v) {
  for (long long int i = 0; i < v.size(); i++) {
    cout << v[i].first << " " << v[i].second << '\n';
  }
}
void dpv(set<long long int> v) {
  for (auto i : v) {
    cout << i << " ";
  }
  cout << '\n';
}
long long int Logn(long long int n, long long int k) {
  return (n > k - 1) ? 1 + Logn(n / k, k) : 0;
}
bool prime[10000];
void Seive() {
  memset(prime, true, sizeof(prime));
  prime[0] = false;
  prime[1] = false;
  for (long long int p = 2; p * p < 10000; p++) {
    if (prime[p] == true) {
      for (long long int i = 2 * p; i < 10000; i += p) {
        prime[i] = false;
      }
    }
  }
}
long long int sumofd(long long int z) {
  long long int s = 0;
  while (z != 0) {
    s += z % 10;
    z = z / 10;
  }
  return s;
}
bool isvowel(char c) {
  if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u') {
    return true;
  } else {
    return false;
  }
}
long long int max(long long int a, long long int b) {
  if (a > b) {
    return a;
  } else {
    return b;
  }
}
void oblivious() {
  long long int n, p, l, r;
  cin >> n >> p >> l >> r;
  long long int x1 = abs(p - l);
  long long int x2 = abs(p - r);
  if (l == 1 && r == n) {
    cout << 0 << '\n';
  } else if (l == 1) {
    cout << x2 + 1 << '\n';
  } else if (r == n) {
    cout << x1 + 1 << '\n';
  } else {
    cout << min(x1, x2) + abs(l - r) + 2 << '\n';
  }
}
signed main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  long long int t = 1;
  while (t--) {
    oblivious();
  }
  return 0;
}
