#include using namespace std; #define FOR(i, a, b) for (int i=(a); i<(b); i++) const int maxN = 100, mod = 1000'000'007; int K; long long Id[maxN][maxN]; void mult(long long A[maxN][maxN], long long B[maxN][maxN], long long C[maxN][maxN]) { FOR(i, 0, K+1) FOR(j, 0, K+1) { C[i][j] = 0; FOR(k, 0, K+1) C[i][j] = (C[i][j] + A[i][k] * B[k][j]) % mod; } } void asg(long long A[maxN][maxN], long long B[maxN][maxN]) { FOR(i, 0, K+1) FOR(j, 0, K+1) A[i][j] = B[i][j]; } void qpow(long long M[maxN][maxN], long long e, long long res[maxN][maxN]) { if (e == 0) { asg(res, Id); return; } static long long temp[maxN][maxN]; qpow(M, e/2, res); mult(res, res, temp); if (e % 2 == 1ll) mult(temp, M, res); else asg(res, temp); } long long M[maxN][maxN], ans[maxN][maxN]; int main() { long long n; scanf ("%d%lld", &K, &n); FOR(i, 0, maxN) Id[i][i] = 1; FOR(i, 1, K+1) FOR(j, 1, K+1) M[i][j] = __gcd(i, j) == 1; qpow(M, n-1, ans); long long res = 0; FOR(i, 1, K+1) FOR(j, 1, K+1) res += ans[i][j]; res %= mod; printf("%lld\n", res); return 0; }