import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;

public class Problem940A {

	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		
		Integer n = in.nextInt();
		Integer d = in.nextInt();
		Integer[] coords = new Integer[n];
		int idx = 0;
		while (idx < n) {
			coords[idx] = in.nextInt();
			idx++;
		}
		in.close();
		
		Arrays.sort(coords);

		int idxS = 0;
		int idxE = n - 1;
		int count = 0;
		while(idxS < idxE)
		{
			int delS = toDelete(coords, d, idxS, idxE, idxS);
			int delE = toDelete(coords, d, idxS, idxE, idxE);
			if(delS == 0 || delE == 0)
			{
				break;
			}
			if(delS < delE)
			{
				idxE--;
				count++;
			}
			else
			{
				idxS++;
				count++;
			}
//			if(isFinish(coords, d, idxS, idxE))
//				break;
		}
		System.out.println(count);
		
//		Map<Integer, Integer> res = new HashMap<Integer, Integer>();
//		for(int i = 0; i < n; i++)
//		{
//			for(int j = i; j < n; j++)
//			{
//				if(coords[j] - coords[i] > d)
//				{
//					if(res.get(i) == null)
//					{
//						res.put(i, 0);
//					}
//					Integer r = res.get(i) + 1;
//					res.put(i, r);
//				}
//			}
//		}
//		
//		res.
//		
//		System.out.println(counter);
	}
	
	private static int toDelete(Integer[] arr, int d, int idxS, int idxE, int idx) {
		int counter = 0;
		for (int i = idxS; i <= idxE; i++) 
		{
			if(Math.abs(arr[i] - arr[idx]) > d)
			{
				counter++;
			}
		}
		return counter;
	}

//	private static boolean isFinish(Integer[] arr, int d, int idxS, int idxE) {
//		for (int i = idxS; i <= idxE; i++) {
//			for (int j = i; j <= idxE; j++) {
//				if (arr[j] - arr[i] > d) {
//					return false;
//				}
//			}
//		}
//		return true;
//	}
}
