def cmb(n,r,mod):

  if r<0 or r>n:

    return 0

  r=min(r,n-r)

  return g1[n]*g2[r]*g2[n-r]%mod



n,k=list(map(int,input().split()))

mod=10**9+7



g1=[1,1]

g2=[1,1]

inverse=[0,1]

 

for i in range(2,n+1):

  g1.append((g1[-1]*i)%mod)

  inverse.append((-inverse[mod%i]*(mod//i))%mod)

  g2.append((g2[-1]*inverse[-1])%mod)



L=[]

ans=0

for i in range(1,k+1):

  L.append(pow(k//i,n,mod))

for i in range(k,0,-1):

  x=L[i-1]

  for j in range(1,k//i):

    x-=L[i*(j+1)-1]

    x+=mod

    x%=mod

  L[i-1]=x

  ans+=x*i

  ans%=mod

print(ans)
n,k=list(map(int,input().split()))

mod=10**9+7

L=[]

ans=0

for i in range(1,k+1):

  L.append(pow(k//i,n,mod))

for i in range(k,0,-1):

  x=L[i-1]

  for j in range(1,k//i):

    x-=L[i*(j+1)-1]

    x+=mod

    x%=mod

  L[i-1]=x

  ans+=x*i

  ans%=mod

print(ans)
def cmb(n, r, mod):
    if r < 0 or r > n:
        return 0
    r = min(r, n - r)
    return g1[n] * g2[r] * g2[n - r] % mod


n, k = list(map(int, input().split()))
mod = 10**9 + 7
g1 = [1, 1]
g2 = [1, 1]
inverse = [0, 1]
for i in range(2, n + 1):
    g1.append((g1[-1] * i) % mod)
    inverse.append((-inverse[mod % i] * (mod // i)) % mod)
    g2.append((g2[-1] * inverse[-1]) % mod)
L = []
ans = 0
for i in range(1, k + 1):
    L.append(pow(k // i, n, mod))
for i in range(k, 0, -1):
    x = L[i - 1]
    for j in range(1, k // i):
        x -= L[i * (j + 1) - 1]
        x += mod
        x %= mod
    L[i - 1] = x
    ans += x * i
    ans %= mod
print(ans)

n, k = list(map(int, input().split()))
mod = 10**9 + 7
L = []
ans = 0
for i in range(1, k + 1):
    L.append(pow(k // i, n, mod))
for i in range(k, 0, -1):
    x = L[i - 1]
    for j in range(1, k // i):
        x -= L[i * (j + 1) - 1]
        x += mod
        x %= mod
    L[i - 1] = x
    ans += x * i
    ans %= mod
print(ans)

-def cmb(n, r, mod): -    if r < 0 or r > n: -        return 0 -    r = min(r, n - r) -    return g1[n] * g2[r] * g2[n - r] % mod - - -g1 = [1, 1] -g2 = [1, 1] -inverse = [0, 1] -for i in range(2, n + 1): -    g1.append((g1[-1] * i) % mod) -    inverse.append((-inverse[mod % i] * (mod // i)) % mod) -    g2.append((g2[-1] * inverse[-1]) % mod)