#include <bits/stdc++.h>
using namespace std;
const double pi = 3.14159265;
long long MODI = 1e9 + 7;
template <typename T>
void out(T xx) {
  cout << xx;
  exit(0);
}
template <typename T>
void add(T& aa, T bb) {
  aa = (aa + bb) % MODI;
}
template <typename T>
T lcm(T x, T y) {
  return x / __gcd(x, y) * y;
}
template <typename T>
T ceil(T x, T y) {
  return x >= 0 ? (x + y - 1) / y : -(-x / y);
}
template <typename T>
T floor(T x, T y) {
  return x >= 0 ? (x / y) : -(-x + y - 1) / y;
}
template <typename T>
T min(T aa, T bb, T cc) {
  return min(aa, min(bb, cc));
}
template <typename T>
T max(T aa, T bb, T cc) {
  return max(aa, max(bb, cc));
}
template <typename T>
T min(T aa, T bb, T cc, T dd) {
  return min(aa, min(bb, cc, dd));
}
template <typename T>
T max(T aa, T bb, T cc, T dd) {
  return max(aa, max(bb, max(cc, dd)));
}
template <typename T>
long long power(T X, T Y) {
  long long A = 1;
  for (; Y; Y >>= 1, X = (X * X))
    if (Y & 1) A = (A * X);
  return A;
}
template <class T>
ostream& operator<<(ostream& out, const vector<T>& v) {
  for (T e : v) out << e << ' ';
  return out;
}
template <typename T>
long long powerm(T X, T Y, long long M = MODI) {
  long long A = 1;
  for (; Y; Y >>= 1, X = (X * X) % M)
    if (Y & 1) A = (A * X) % M;
  return A;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  long long n, m, a, b;
  cin >> n >> m >> a >> b;
  a--;
  b--;
  if (a % m == 0 and (b + 1) % m == 0) out(1);
  if (a % m == 0 and b == n - 1) out(1);
  if (a % m <= b % m and a / m == b / m) out(1);
  if (a % m == b % m + 1) out(2);
  if (a % m == 0 or (b + 1) % m == 0) out(2);
  if (b == n - 1) out(2);
  if (a / m + 1 == b / m) out(2);
  out(3);
  return 0;
}
