#include #define rep(i,n) for(int i=0;i<(int)(n);i++) using namespace std; using ll = long long ; using P = pair ; using pll = pair; constexpr int INF = 1e9; constexpr long long LINF = 1e17; constexpr int MOD = 1000000007; //コーナーケースに注意!!!! using vec = vector ; using mat = vector; mat mul(mat &A, mat &B,int mod) { mat C(A.size(),vec(B[0].size())); for(int i=0;i 0){ if(n & 1) B = mul(B,A,mod); A = mul(A,A,mod); n >>= 1; } return B; } int main(){ ll m,k; cin >> m >> k; vector> A(m,vector(m,0)); rep(i,m){ rep(j,m){ A[(i+j)%m][i] += 1; A[(i*j)%m][i] += 1; } } A = pow(A,k,MOD); cout << A[0][0] << endl; return 0; }