import Control.Monad
import Data.Maybe
import Data.List
import qualified Data.ByteString.Char8 as BS
import qualified Data.Vector as V
 
main = abc161c

abc161c = do
    [n, k] <- getIntList
    let init = snd (divMod n k)
    let initV = V.fromList [init]
    print $ V.foldl' min n (operation initV init k)

operation :: V.Vector Integer -> Integer -> Integer -> V.Vector Integer
operation vec n k = let abs' = abs (n-k) in
    if V.elem abs' vec
        then vec
        else operation (V.cons abs' vec) abs' k

checkSelect :: Integer -> Integer -> Integer -> Bool
checkSelect m sum prod
    | prod * 4 * m < sum  = False
    | otherwise = True


readInt = fst . fromJust . BS.readInteger
readIntList = map readInt . BS.words
getIntList = readIntList <$> BS.getLine
getIntNList n = map readIntList <$> replicateM (fromIntegral n) BS.getLine
