#include <bits/stdc++.h>

using namespace std;
typedef long long ll;

const ll mod=1000000007;
ll n;
vector<ll> primes;
ll x=0;

ll fpow(ll b,ll e)
{
    ll res=1;
    while(e)
    {
        if(e&1) res=(res*b)%mod;
        b=(b*b)%mod;
        e/=2;
    }
    return res;
}

void solve(int idx,int cnt,ll now,ll lim)
{
    if((cnt%2)==0) x=(x+fpow(lim/now,n))%mod;
    else x=(x-fpow(lim/now,n)+mod)%mod;
    for(int i=idx+1;i<(int)primes.size();i++)
    {
        if(now*primes[i]<=lim) solve(i,cnt+1,now*primes[i],lim);
        else break;
    }
}

int main()
{
    ll k;
    cin >> n >> k;
    vector<bool> sieve(k+1,1);
    for(ll o=2;o<=k;o++)
    {
        if(sieve[o]==0) continue;
        primes.push_back(o);
        for(ll i=o*o;i<=k;i+=o) sieve[i]=0;
    }
    ll res=0;
    for(ll i=1;i<=k;i++)
    {
        x=0;
        solve(-1,0,1,k/i);
        res=(res+i*x)%mod;
    }
    cout << res << endl;
    return 0;
}
