program name
    use,intrinsic :: iso_fortran_env
    implicit none
    integer(int64):: n,k,i,j,ans
    integer(int64), allocatable:: gcn(:)
    integer(int64),parameter:: md = 1000000007

    read*, n,k
    allocate(gcn(k))

    do i=1,k
        gcn(i) = calc_rj(k/i, n)
    end do

    do i=k,1,-1
        j=2
        do while(i*j <= k)
            gcn(i) = gcn(i) - gcn(i*j)
            j=j+1
        end do
    end do

    ans=0
    do i=1,k
        ans=mod(ans+gcn(i)*i,md)
    end do

    print*, ans

contains
    function calc_rj(x,y) result(ret)
        integer(int64):: x,y,ret
        integer(int64):: num, nx
        ret = 1
        num = y
        nx = x
        do while(num > 0)
            if (btest(num,0)) then
                ret=mod(ret*nx,md)
            end if
            nx=mod(nx*nx,md)
            num=rshift(num,1)
        end do
    end function
end program name    
