import Data.Maybe (fromJust) import qualified Data.ByteString.Char8 as BSC8 readInts :: IO [Int] readInts = map (fst . fromJust . BSC8.readInt ) . BSC8.words <$> BSC8.getLine main :: IO () main = do (s:k:_) <- readInts print $ ((fromIntegral s) ^ (fromIntegral k)) `mod` 1000000007