import Data.Vector (Vector, (!))
import qualified Data.Vector as U

solve :: Int -> Int -> Mint
solve n k = sum $ U.map (uncurry(*)) idp where
  idp = U.zip dp $ U.enumFromTo 1 (Mint k)
  dp = U.constructrN k f
  f dp = Mint(div k i) ^ n - sum mul where
    i = k - U.length dp
    mul = [dp!(i*m-1) | m <- [1..U.length dp `div` i]]

main = do
  [n,k] <- map read.words <$> getLine
  print $ solve n k

modulus = 10^9 + 7
newtype Mint = Mint Int
instance Num Mint where
  (Mint a) + (Mint b) = Mint $ mod (a+b) modulus
  (Mint a) * (Mint b) = Mint $ mod (a*b) modulus
  abs = id
  signum = id
  fromInteger a = Mint $ mod (fromInteger a) modulus
  negate (Mint a) = Mint $ mod (-a) modulus
instance Enum Mint where
  fromEnum (Mint a) = a
  toEnum a = Mint a
instance Show Mint where
  show (Mint a) = show a