Problem:
Score : 300 points

Problem Statement

Given any integer x, Aoki can do the operation below.

Operation: Replace x with the absolute difference of x and K.

You are given the initial value of an integer N. Find the minimum possible value taken by N after Aoki does the operation zero or more times.

Constraints

0 ≤ N ≤ 10^{18}

1 ≤ K ≤ 10^{18}

All values in input are integers.

Input

Input is given from Standard Input in the following format:

N K

Output

Print the minimum possible value taken by N after Aoki does the operation zero or more times.

Sample Input 1

7 4

Sample Output 1

1

Initially, N=7.

After one operation, N becomes |7-4| = 3.

After two operations, N becomes |3-4| = 1, which is the minimum value taken by N.

Sample Input 2

2 6

Sample Output 2

2

N=2 after zero operations is the minimum.

Sample Input 3

1000000000000000000 1

Sample Output 3

0

Solution in C++14 (GCC 5.4.1) (judge verdict: Wrong Answer)

#include <bits/stdc++.h>
using namespace std;
const int INF = 2100100100;
// typedef longlong ll;


int main() {
    long long n,k;
    cin >> n >> k;
    if (n*2==k){
        cout << 0 << endl;
        return 0;
    }
    if (n*2<k){
        cout << n << endl;
        return 0;
    }
    int ans;
    while(n>k*1e16){
        n-=k*1e16;
    }
    while(n>k*1e12){
        n-=k*1e12;
    }
    while(n>k*1e8){
        n-=k*1e8;
    }
    while(n>k*1e4){
        n-=k*1e4;
    }
    while(n>=0){
        n -= k;
    }
    ans = n+k;
    
    int ans2,now;
    ans2 = ans;
    for (int i=0;i<10000;i++){
    now = abs(ans2-k);
    ans = min(ans,now);
    ans2 = now;
    }



    cout << ans << endl;
    return 0;
}