import Control.Applicative

pow :: Int -> Int -> Int
pow m n = pow' m n 1

pow' :: Int -> Int -> Int -> Int
pow' m n oddtime
    | n == 0 = oddtime
    | even n = pow' (m*m) (n `div` 2) oddtime
    | odd n = pow' (m*m) (n `div` 2) (oddtime*m)

main = do
    [m, n] <- words <$> getLine
    putStrLn $ show $ (pow (read m::Int) (read n::Int)) `mod` 1000000007