private data class Path(val a: Int, val b: Int)

fun main(args: Array<String>) {
    val (n, m) = readLine()!!.split(" ").map { it.toInt() }

    // 区間の区切れがいくつあるかを求めれば良い
    var routes = mutableListOf<Path>()
    for ( i in 0 until m) {
        val (a, b) = readLine()!!.split(" ").map { it.toInt() }
        routes.add(Path(a, b))
    }

    // ソート
    routes.sortBy { it.a }

    // 区間が区切れる数を求める（区切れる手前で切る

    // WA かぶっている限り，区間を縮小していく -> かぶらないものが出てきたらリセット & cnt+1

    var start = routes[0].a
    var end = routes[0].b
    var cnt = 0

    for(i in 1 until routes.size) {
        // ソートされている前提

        // 区間に含まれている場合，縮小
        // 区間が接している場合は別とみなすことに注意
        if( (routes[i].a< start && routes[i].b > start)
            || (routes[i].a < end && routes[i].b > end)
            || (routes[i].a >= start && routes[i].b <= end)) {
            start = Math.min(start, routes[i].a)
            end = Math.min(end, routes[i].b)
        } else {
            start = routes[i].a
            end = routes[i].b
            cnt += 1
        }
    }

    // 最後の分
    cnt += 1

    println(cnt)

}