2 1
1 1
 4 1
2 2 1 1
 10 1
2 6 3 4 2 4 4 3 2 1
 2 1
999152 999153
 8 1000000
1 1 5 1000000 1000000 2 2 2
 9 2
1 6 1 5 5 8 6 8 7
 15 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 1 4
8
 10 1
6 3 1 3 6 4 1 3 6 4
 10 1
1 2 3 5 6 8 10 11 9 4
 7 2
1 5 5 8 9 8 8
 2 1000000
1 1000000
 8 2
3 13 9 8 3 13 9 14
 1 1
1
 2 1
1 2

2
 2
 4
 1
 2
 4
 15
 1
 7
 2
 4
 1
 5
 1
 1

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.math.BigInteger;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.PriorityQueue;
import java.util.Stack;
import java.util.stream.IntStream;
import java.util.stream.Stream;
 

public class Main {

   
   
  
    public static void main(String[] args) throws IOException, Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        int[] _c = nextIntArray(br);
        
        int n = _c[0];
        int k = _c[1];
        int[] a = nextIntArray(br);
        Integer[] b = new Integer[n];
        for(int i=0;i<n;i++) b[i] = a[i];
        bw.append(solve(n, k, b)+"\n");
        
        bw.close();
        
    }
    
    
   
    private static int[] nextIntArray(BufferedReader br) throws IOException{
        String[] in=br.readLine().split(" ");
        int[] a = new int[in.length];
        for(int i=0;i<a.length;i++) a[i] = Integer.parseInt(in[i]);
        return a;
    }
    private static long[] nextLongArray(BufferedReader br) throws IOException{
        String[] in=br.readLine().split(" ");
        long[] a = new long[in.length];
        for(int i=0;i<a.length;i++) a[i] = Long.parseLong(in[i]);
        return a;
    }
    private static String stringifyIntArray(int[] t) {
        StringBuilder sb = new StringBuilder();
        for(Integer tt : t) {
            sb.append(tt);
        }
        return sb.toString();
    }

    private static int solve(int n, int k, Integer[] a) {
        int saved = 0;
        int start=0;
        
        Arrays.sort(a);
        for(int i=1;i<n;i++){
            //consider [start .. i-1]
            int lo=start;
            int hi=i-1;
            while(lo < hi) {
                int mid = lo+hi>>1;
                if(a[i] >= a[mid]+1 && a[i] <= a[mid]+k) {
                    hi=mid;
                }
                else{
                    lo=mid+1;
                }
            }
            if(a[i] >= a[lo]+1 && a[i] <= a[lo]+k) {
                saved += Math.max(0, lo-start);
                start=i;
            }   
        }
        saved += n-start;
        return saved;
    }
    
   
} 