

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import java.util.TreeMap;

public class Main {

	static Scanner scanner;

	public static void main(String[] args) {
	    scanner = new Scanner(System.in);

	    long N=gl();
	    long K=gl();
	    long a=Math.floorDiv(N, K);
	    long b=(K*(a+1))-N;
	    long c=N-(K*a);
        

        //System.out.print(s);

        if (b>c) {
        	System.out.println(c);
        }else {
        	System.out.println(b);
        }
	}
	
	// ユークリッドの互除法
    public static int uclid(int m, int n) {
    	if (m<n) {
			m^=n;
			n^=m;
			m^=n;
		}

		while(true) {
			int t=m%n;
			if (t==0) {
				return n;
			} else {
				m=n;
				n=t;
			}
		}
    }

	// 文字列として入力を取得
	public static String gs() {
		return scanner.next();
	}

	// intとして入力を取得
	public static int gi() {
		return Integer.parseInt(scanner.next());
	}

	// longとして入力を取得
	public static long gl() {
		return Long.parseLong(scanner.next());
	}

	// doubleとして入力を取得
	public static double gd() {
		return Double.parseDouble(scanner.next());
	}
} import java.util.ArrayList; ArrayList java.util import java.util.Arrays; Arrays java.util import java.util.Collections; Collections java.util import java.util.List; List java.util import java.util.Map; Map java.util import java.util.Scanner; Scanner java.util import java.util.TreeMap; TreeMap java.util public class Main {

	static Scanner scanner;

	public static void main(String[] args) {
	    scanner = new Scanner(System.in);

	    long N=gl();
	    long K=gl();
	    long a=Math.floorDiv(N, K);
	    long b=(K*(a+1))-N;
	    long c=N-(K*a);
        

        //System.out.print(s);

        if (b>c) {
        	System.out.println(c);
        }else {
        	System.out.println(b);
        }
	}
	
	// ユークリッドの互除法
    public static int uclid(int m, int n) {
    	if (m<n) {
			m^=n;
			n^=m;
			m^=n;
		}

		while(true) {
			int t=m%n;
			if (t==0) {
				return n;
			} else {
				m=n;
				n=t;
			}
		}
    }

	// 文字列として入力を取得
	public static String gs() {
		return scanner.next();
	}

	// intとして入力を取得
	public static int gi() {
		return Integer.parseInt(scanner.next());
	}

	// longとして入力を取得
	public static long gl() {
		return Long.parseLong(scanner.next());
	}

	// doubleとして入力を取得
	public static double gd() {
		return Double.parseDouble(scanner.next());
	}
} Main static Scanner scanner; scanner public static void main(String[] args) {
	    scanner = new Scanner(System.in);

	    long N=gl();
	    long K=gl();
	    long a=Math.floorDiv(N, K);
	    long b=(K*(a+1))-N;
	    long c=N-(K*a);
        

        //System.out.print(s);

        if (b>c) {
        	System.out.println(c);
        }else {
        	System.out.println(b);
        }
	} main {
	    scanner = new Scanner(System.in);

	    long N=gl();
	    long K=gl();
	    long a=Math.floorDiv(N, K);
	    long b=(K*(a+1))-N;
	    long c=N-(K*a);
        

        //System.out.print(s);

        if (b>c) {
        	System.out.println(c);
        }else {
        	System.out.println(b);
        }
	} scanner = new Scanner(System.in) scanner new Scanner(System.in) long N=gl(); N gl() gl long K=gl(); K gl() gl long a=Math.floorDiv(N, K); a Math.floorDiv(N, K) Math.floorDiv Math N K long b=(K*(a+1))-N; b (K*(a+1))-N (K*(a+1)) K (a+1) a 1 N long c=N-(K*a); c N-(K*a) N (K*a) K a if (b>c) {
        	System.out.println(c);
        }else {
        	System.out.println(b);
        } b>c b c {
        	System.out.println(c);
        } System.out.println(c) System.out.println System.out System System.out c {
        	System.out.println(b);
        } System.out.println(b) System.out.println System.out System System.out b String[] args args // ユークリッドの互除法
    public static int uclid(int m, int n) {
    	if (m<n) {
			m^=n;
			n^=m;
			m^=n;
		}

		while(true) {
			int t=m%n;
			if (t==0) {
				return n;
			} else {
				m=n;
				n=t;
			}
		}
    } uclid {
    	if (m<n) {
			m^=n;
			n^=m;
			m^=n;
		}

		while(true) {
			int t=m%n;
			if (t==0) {
				return n;
			} else {
				m=n;
				n=t;
			}
		}
    } if (m<n) {
			m^=n;
			n^=m;
			m^=n;
		} m<n m n {
			m^=n;
			n^=m;
			m^=n;
		} m^=n m n n^=m n m m^=n m n while(true) {
			int t=m%n;
			if (t==0) {
				return n;
			} else {
				m=n;
				n=t;
			}
		} true {
			int t=m%n;
			if (t==0) {
				return n;
			} else {
				m=n;
				n=t;
			}
		} int t=m%n; t m%n m n if (t==0) {
				return n;
			} else {
				m=n;
				n=t;
			} t==0 t 0 {
				return n;
			} return n; n {
				m=n;
				n=t;
			} m=n m n n=t n t int m m int n n // 文字列として入力を取得
	public static String gs() {
		return scanner.next();
	} gs {
		return scanner.next();
	} return scanner.next(); scanner.next() scanner.next scanner // intとして入力を取得
	public static int gi() {
		return Integer.parseInt(scanner.next());
	} gi {
		return Integer.parseInt(scanner.next());
	} return Integer.parseInt(scanner.next()); Integer.parseInt(scanner.next()) Integer.parseInt Integer scanner.next() scanner.next scanner // longとして入力を取得
	public static long gl() {
		return Long.parseLong(scanner.next());
	} gl {
		return Long.parseLong(scanner.next());
	} return Long.parseLong(scanner.next()); Long.parseLong(scanner.next()) Long.parseLong Long scanner.next() scanner.next scanner // doubleとして入力を取得
	public static double gd() {
		return Double.parseDouble(scanner.next());
	} gd {
		return Double.parseDouble(scanner.next());
	} return Double.parseDouble(scanner.next()); Double.parseDouble(scanner.next()) Double.parseDouble Double scanner.next() scanner.next scanner public class Main {

	static Scanner scanner;

	public static void main(String[] args) {
	    scanner = new Scanner(System.in);

	    long N=gl();
	    long K=gl();
	    long a=Math.floorDiv(N, K);
	    long b=(K*(a+1))-N;
	    long c=N-(K*a);
        

        //System.out.print(s);

        if (b>c) {
        	System.out.println(c);
        }else {
        	System.out.println(b);
        }
	}
	
	// ユークリッドの互除法
    public static int uclid(int m, int n) {
    	if (m<n) {
			m^=n;
			n^=m;
			m^=n;
		}

		while(true) {
			int t=m%n;
			if (t==0) {
				return n;
			} else {
				m=n;
				n=t;
			}
		}
    }

	// 文字列として入力を取得
	public static String gs() {
		return scanner.next();
	}

	// intとして入力を取得
	public static int gi() {
		return Integer.parseInt(scanner.next());
	}

	// longとして入力を取得
	public static long gl() {
		return Long.parseLong(scanner.next());
	}

	// doubleとして入力を取得
	public static double gd() {
		return Double.parseDouble(scanner.next());
	}
} public class Main {

	static Scanner scanner;

	public static void main(String[] args) {
	    scanner = new Scanner(System.in);

	    long N=gl();
	    long K=gl();
	    long a=Math.floorDiv(N, K);
	    long b=(K*(a+1))-N;
	    long c=N-(K*a);
        

        //System.out.print(s);

        if (b>c) {
        	System.out.println(c);
        }else {
        	System.out.println(b);
        }
	}
	
	// ユークリッドの互除法
    public static int uclid(int m, int n) {
    	if (m<n) {
			m^=n;
			n^=m;
			m^=n;
		}

		while(true) {
			int t=m%n;
			if (t==0) {
				return n;
			} else {
				m=n;
				n=t;
			}
		}
    }

	// 文字列として入力を取得
	public static String gs() {
		return scanner.next();
	}

	// intとして入力を取得
	public static int gi() {
		return Integer.parseInt(scanner.next());
	}

	// longとして入力を取得
	public static long gl() {
		return Long.parseLong(scanner.next());
	}

	// doubleとして入力を取得
	public static double gd() {
		return Double.parseDouble(scanner.next());
	}
} Main


import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import java.util.TreeMap;

public class Main {

	static Scanner scanner;

	public static void main(String[] args) {
	    scanner = new Scanner(System.in);

	    long N=gl();
	    long K=gl();
	    long a=Math.floorDiv(N, K);
	    long b=(K*(a+1))-N;
	    long c=N-(K*a);
        

        //System.out.print(s);

        if (b>c) {
        	System.out.println(c);
        }else {
        	System.out.println(b);
        }
	}
	
	// ユークリッドの互除法
    public static int uclid(int m, int n) {
    	if (m<n) {
			m^=n;
			n^=m;
			m^=n;
		}

		while(true) {
			int t=m%n;
			if (t==0) {
				return n;
			} else {
				m=n;
				n=t;
			}
		}
    }

	// 文字列として入力を取得
	public static String gs() {
		return scanner.next();
	}

	// intとして入力を取得
	public static int gi() {
		return Integer.parseInt(scanner.next());
	}

	// longとして入力を取得
	public static long gl() {
		return Long.parseLong(scanner.next());
	}

	// doubleとして入力を取得
	public static double gd() {
		return Double.parseDouble(scanner.next());
	}
}