fun main(args: Array<String>) {
    val (N, M) = readInputLine().split(" ").map { it.toInt() }
    val bridges = mutableListOf<Pair<Int, Int>>()

    for (i in 1..M) {
        val (a, b) = readInputLine().split(" ").map { it.toInt() }
        bridges.add(Pair(a, b))
    }
    
    bridges.sortBy { it.second }
    bridges.sortBy { it.first }
    
    val ansList = mutableListOf<Pair<Int, Int>>()
    ansList.add(bridges.first())
    
    for ((a, b) in bridges.drop(1)) {
        if (ansList.last().first == a) {
            // 始点が同じ場合は終点がより始点に近い方のみを残す
            continue
        }
        if (b <= ansList.last().second) {
            // 包含関係にある場合は始点がより終点に近い方のみを残す
            ansList.removeAt(ansList.lastIndex)
            ansList.add(Pair(a, b))
            continue
        }
        
        if (ansList.last().let { it.first < a && it.second < b && a < it.second }) {
            // 始点が異なり、終点も異なるが、ベクトルが交わる場合はより内側の始点、終点を残す
            val b = ansList.last().second
            ansList.removeAt(ansList.lastIndex)
            ansList.add(Pair(a, b))
            continue
        }
        
        // 上記以外はそのまま候補に足す
        ansList.add(Pair(a, b))
    }
    
    println(ansList.size)
}

fun readInputLine(): String {
    return readLine()!!
}
