```go
package main
import (
"bufio"
"fmt"
"os"
"sort"
)
type Alpinist struct {
s, a int
}
func main() {
reader := bufio.NewReaderSize(os.Stdin, 65536)
n := readInt(reader)
d := readInt(reader)
valid := make([]Alpinist, 0, n)
for i := 0; i < n; i++ {
s := readInt(reader)
a := readInt(reader)
if s >= d {
valid = append(valid, Alpinist{s, a})
}
}
sort.Slice(valid, func(i, j int) bool {
if valid[i].a != valid[j].a {
return valid[i].a < valid[j].a
}
return valid[i].s < valid[j].s
})
ans := 0
p := d
for _, a := range valid {
if a.s >= p {
ans++
if a.a > p {
p = a.a
}
}
}
fmt.Println(ans)
}
func readInt(reader *bufio.Reader) int {
var n int
var c byte
var err error
for {
c, err = reader.ReadByte()
if err != nil {
return n
}
if c >= '0' && c <= '9' {
break
}
}
n = int(c - '0')
for {
c, err = reader.ReadByte()
if err != nil || c < '0' || c > '9' {
break
}
n = n*10 + int(c - '0')
}
return n
}
```