#include <stdio.h>
 
long long mul(long long a, long long b, long long MOD){
    return(a*b)%MOD;
}

long long pow_MOD(long long x,long long n,long long MOD){
    long long ans = 1;
    while(n){
        if(n&1) ans=mul(ans,x,MOD);
        x=mul(x,x,MOD);
        n>>=1;
    }
    return ans;
}
 
int main(){
    long long MOD = 1000000007LL;
    int N,K;
    scanf("%d %d",&N,&K);
    long long ans=0;
    long long v[K];
    for(int i = K-1;i>=0;i--) {
        v[i] = pow_MOD(K/(i+1),N,MOD);
        for(int j = 2*(i+1); j <= K;j+=(i+1)) {
            v[i]-=v[j-1];
            if(v[i] < 0) v[i]+=MOD;
        }
    }
    for(int i = 0; i<K; i++) ans+=((v[i]*((i+1LL)%MOD))%MOD);
    printf("%lld\n",ans%MOD);
    return 0;
}