#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
const int MAXN = 800005;
struct maxflow {
  struct edg {
    int pos, cap, rev;
  };
  vector<edg> gph[MAXN];
  void clear() {
    for (int i = 0; i < MAXN; i++) {
      gph[i].clear();
    }
  }
  void add_edge(int s, int e, int x) {
    gph[s].push_back({e, x, (int)gph[e].size()});
    gph[e].push_back({s, 0, (int)gph[s].size() - 1});
  }
  int dis[MAXN], pnt[MAXN];
  bool bfs(int src, int sink) {
    memset(dis, 0, sizeof(dis));
    memset(pnt, 0, sizeof(pnt));
    queue<int> que;
    que.push(src);
    dis[src] = 1;
    while (!que.empty()) {
      int x = que.front();
      que.pop();
      for (int i = 0; i < gph[x].size(); i++) {
        edg e = gph[x][i];
        if (e.cap > 0 && !dis[e.pos]) {
          dis[e.pos] = dis[x] + 1;
          que.push(e.pos);
        }
      }
    }
    return dis[sink] > 0;
  }
  int dfs(int x, int sink, int f) {
    if (x == sink) return f;
    for (; pnt[x] < gph[x].size(); pnt[x]++) {
      edg e = gph[x][pnt[x]];
      if (e.cap > 0 && dis[e.pos] == dis[x] + 1) {
        int w = dfs(e.pos, sink, min(f, e.cap));
        if (w) {
          gph[x][pnt[x]].cap -= w;
          gph[e.pos][e.rev].cap += w;
          return w;
        }
      }
    }
    return 0;
  }
  long long match(int src, int sink) {
    long long ret = 0;
    while (bfs(src, sink)) {
      int r;
      while ((r = dfs(src, sink, 2e9))) ret += r;
    }
    return ret;
  }
} mf;
int n, m, l[200005], r[200005];
int main() {
  scanf("%d %d", &n, &m);
  for (int i = 1; i <= n; i++) {
    int l, r;
    scanf("%d %d", &l, &r);
    mf.add_edge(0, i, 1);
    if (l > 0) mf.add_edge(i, n + l, 1);
    if (r <= m) mf.add_edge(i, n + m + r, 1);
  }
  for (int i = 1; i <= m; i++) {
    if (i > 1) mf.add_edge(n + i, n + i - 1, 1e9);
    if (i < m) mf.add_edge(n + m + i, n + m + i + 1, 1e9);
    mf.add_edge(n + i, n + 2 * m + i, 1);
    mf.add_edge(n + m + i, n + 2 * m + i, 1);
    mf.add_edge(n + 2 * m + i, n + 3 * m + 1, 1);
  }
  cout << n - mf.match(0, n + 3 * m + 1) << endl;
}
