#include<bits/stdc++.h>
#define MOD 1000000007
#define MOD2 1000000006
#define TEMPMOD1 998244353
#define TEMPMOD2 998244352
#define INF 1000000000000000007
#define NEGINF -1000000000000000007
#define vll vector<ll> 
#define vvll vector<vector<ll>>
#define pll pair<ll,ll>
#define pii pair<int,int>
#define plll pair<ll,pll>
#define vpll vector<pll>
using namespace std;
typedef long long int ll;

ll mobius[100010];

void initmobius()
{
    for(ll i=1;i<100010;i++)
    {
        mobius[i]=1;
    }
    for(ll i=2;i<100010;i++)
    {
        if(mobius[i]==1)
        {
            for(ll j=i;j<100010;j+=i)
            {
                mobius[j]*=(-i);
            }
            for(ll j=(i*i);j<100010;j+=(i*i))
            {
                mobius[j]=0;
            }
        }
    }
    for(ll i=2;i<100010;i++)
    {
        if(mobius[i]>0)
        {
            mobius[i]=1;
        }
        else if(mobius[i]<0)
        {
            mobius[i]=-1;
        }
    }
    return;
}

ll modexpo(ll base,ll power)
{
    ll result=1;
    while(power)
    {
        if(power&1)
        {
            result=(result*base)%MOD;
        }
        base=(base*base)%MOD;
        power>>=1;
    }
    return result;
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    
    initmobius();
    ll n,k,store;
    cin>>n>>k;
    ll divby[k+1];
    for(ll i=1;i<=k;i++)
    {   
        store=k/i;
        divby[i]=modexpo(store,n);
    }
    for(ll i=1;i<=k;i++)
    {
        for(ll j=2;(j*i)<=k;j++)
        {
            divby[i]+=(mobius[j]*divby[j*i]);
            if(divby[i]>=MOD)
            {
                divby[i]-=MOD;
            }
            else if(divby[i]<0)
            {
                divby[i]+=MOD;
            }
        }
    }
    ll ans=0;
    for(ll i=1;i<=k;i++)
    {
        store=divby[i]*i;
        if(store>=MOD)
        {
            store%=MOD;
        }
        ans+=store;
        if(ans>=MOD)
        {
            ans-=MOD;
        }
    }
    cout<<ans;
    return 0;
}