modexp :: Integral a => a -> a -> a -> a modexp b ex m | ex == 0 = 1 | even ex = flip mod m $ (\x -> x * x) $ flip mod m $ modexp b (div ex 2) m | otherwise = flip mod m $ mod b m * (flip mod m $ modexp b (ex - 1) m) main :: IO () main = print . (\(n : m : _) -> modexp n m 10) .map read . words =<< getContents