// E - Sum of gcd of Tuples (Hard)
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define MOD 1000000007
// a^n mod m を計算する(繰り返し二乗法,二分累乗法:O(logn)) (再帰版)
ll modpow(ll a,ll n){return n?modpow(a*a%MOD,n/2)*(n%2?a:1)%MOD:1;}

ll cnt[100001]; // [gcd:[1,K]] gcd 毎の個数

int main(){
	int N,K; cin>>N>>K;
	ll ans = 0;
	for(int g=K; g>=1; --g){ // g: gcd を固定
		ll c = modpow(K/g, N); // g の倍数の個数
		for(int n=2; n*g<=K; ++n) c -= cnt[n*g]; // g*1 以外を除去
		ans = (ans + (c * g % MOD)) % MOD;
		cnt[g] = c;
	}
	cout<< (ans+MOD)%MOD <<endl; // 負数の修正
}