Language: Java

import java.io.*;
import java.util.*;

public class s573993837 {
    public static void main(String[] args) {
        InputStream inputStream = System.in;
        OutputStream outputStream = System.out;
        InputReader in = new InputReader(inputStream);
        PrintWriter out = new PrintWriter(outputStream);
        solve(in, out);
        out.close();
    }

    static int L, R, top, bottom;

    public static void solve(InputReader sc, PrintWriter pw) {

        int t = 1;
        u:
        while (t-- > 0) {
            long n = sc.nextLong();
            long m = sc.nextLong();
            if (n == 0) {
                pw.println(0);
                continue u;
            }
            if (n == m) {
                pw.println(0);
                continue u;
            }
            if (n > m) {
                n = m + n % m;
                n -= m;
                pw.println(Math.min(m - n, n));
                continue u;
            }
            pw.println(Math.min(m - n, n));
        }
    }

    public static void swap(char[] chrr, int i, int j) {
        char temp = chrr[i];
        chrr[i] = chrr[j];
        chrr[j] = temp;
    }

    public static int num(int n) {
        int a = 0;
        while (n > 0) {
            a += (n & 1);
            n >>= 1;
        }
        return a;
    }

    static class Pair {
        int u, v, i, val;

        Pair(int a, int b, int i) {
            this.u = a;
            this.v = b;
            this.i = i;
        }
    }

    static boolean isPrime(int n) {
        if (n <= 1) return false;
        if (n <= 3) return true;
        if (n % 2 == 0 || n % 3 == 0) return false;
        for (int i = 5; i * i <= n; i = i + 6) if (n % i == 0 || n % (i + 2) == 0) return false;
        return true;
    }

    static long gcd(long a, long b) {
        if (b == 0) return a;
        return a > b ? gcd(b, a % b) : gcd(a, b % a);
    }

    static long fast_pow(long base, long n, long M) {
        if (n == 0) return 1;
        if (n == 1) return base;
        long halfn = fast_pow(base, n / 2, M);
        if (n % 2 == 0) return (halfn * halfn) % M;
        else return (((halfn * halfn) % M) * base) % M;
    }

    static long modInverse(long n, long M) {
        return fast_pow(n, M - 2, M);
    }

    public static void feedArr(long[] arr, InputReader sc) {
        for (int i = 0; i < arr.length; i++) arr[i] = sc.nextLong();
    }

    public static void feedArr(double[] arr, InputReader sc) {
        for (int i = 0; i < arr.length; i++) arr[i] = sc.nextDouble();
    }

    public static void feedArr(int[] arr, InputReader sc) {
        for (int i = 0; i < arr.length; i++) arr[i] = sc.nextInt();
    }

    public static void feedArr(String[] arr, InputReader sc) {
        for (int i = 0; i < arr.length; i++) arr[i] = sc.next();
    }

    public static String printArr(int[] arr) {
        StringBuilder sbr = new StringBuilder();
        for (int i : arr) sbr.append(i + " ");
        return sbr.toString();
    }

    public static String printArr(long[] arr) {
        StringBuilder sbr = new StringBuilder();
        for (long i : arr) sbr.append(i + " ");
        return sbr.toString();
    }

    public static String printArr(String[] arr) {
        StringBuilder sbr = new StringBuilder();
        for (String i : arr) sbr.append(i + " ");
        return sbr.toString();
    }

    public static String printArr(double[] arr) {
        StringBuilder sbr = new StringBuilder();
        for (double i : arr) sbr.append(i + " ");
        return sbr.toString();
    }

    static class InputReader {
        public BufferedReader reader;
        public StringTokenizer tokenizer;

        public InputReader(InputStream stream) {
            reader = new BufferedReader(new InputStreamReader(stream), 32768);
            tokenizer = null;
        }

        public String next() {
            while (tokenizer == null || !tokenizer.hasMoreTokens()) {
                try {
                    tokenizer = new StringTokenizer(reader.readLine());
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
            return tokenizer.nextToken();
        }

        public int nextInt() {
            return Integer.parseInt(next());
        }

        public long nextLong() {
            return Long.parseLong(next());
        }

        public double nextDouble() {
            return Double.parseDouble(next());
        }
    }
}


Example test case(s):
input: 7 4

output: 1