<?php
  list($n, $k) = explode(" ", trim(fgets(STDIN)));
  $n=intval($n);
  $k=intval($k);

  $len=0;
  $st = new SegTree($n, 0);
  for($i=0;$i<$n;$i++){
    list($a) = explode(" ", trim(fgets(STDIN)));
    $a=intval($a);
    $x = $st->query(max($a-$k,0), min($a+$k,300000)+1) + 1;
    $st->update($a,$x);
    $len = max($len, $x);
  }
  echo $len;
  
                   

class SegTree {
  private $N;
  private $INI;
  private $tree=[];

  /**
   * コンストラクタ
   * $n 数列の長さ
   * $ini_value 初期値
   */
  public function __construct($n, $ini_value) {
    $this->N = 1;
    while ($this->N < $n) {
      $this->N *= 2;
    }
    $this->INI = $ini_value;
    $this->tree=array_fill(0, $this->N*2, $ini_value);
  }

  public function update($i, $value){
    $i = $this->N + $i - 1;
    $this->tree[$i] = $value;
    while ($i > 0) {
      $i = intdiv($i - 1, 2);
      $this->tree[$i] = $this->marge($this->tree[$i * 2 + 1], $this->tree[$i * 2 + 2]);
    }
  }

  public function query($start, $end){
    return $this->sub_query($start, $end, 0, 0, $this->N);
  }

  private function sub_query($start, $end, $k, $l, $r){
    if($r <= $start || $end <= $l){
      return $this->INI;
    }
    if($start <= $l && $r <= $end){
      return $this->tree[$k];
    }else{
      $lv = $this->sub_query($start, $end, 2*$k+1, $l, intdiv($l+$r, 2));
      $rv = $this->sub_query($start, $end, 2*$k+2, intdiv($l+$r, 2), $r);
      return $this->marge($lv, $rv);
    }
  }

  private function marge($a, $b){
    return max($a,$b);
    //return min($a,$b);
  }

}