#include <bits/stdc++.h>
using namespace std;
const int mod = 1000000000 + 7;
long long a[] = {
    1,         3,         4,         5,         7,         9,         13,
    15,        19,        27,        39,        40,        57,        58,
    81,        85,        120,       121,       174,       179,       255,
    260,       363,       382,       537,       544,       780,       805,
    1146,      1169,      1632,      1718,      2415,      2447,      3507,
    3622,      5154,      5260,      7341,      7730,      10866,     11011,
    15780,     16298,     23190,     23669,     33033,     34784,     48894,
    49549,     71007,     73340,     104352,    106510,    148647,    156527,
    220020,    222970,    319530,    330029,    469581,    479294,    668910,
    704371,    990087,    1003364,   1437882,   1485130,   2113113,   2156822,
    3010092,   3169669,   4455390,   4515137,   6470466,   6683084,   9509007,
    9705698,   13545411,  14263510,  20049252,  20318116,  29117094,  30073877,
    42790530,  43675640,  60954348,  64185794,  90221631,  91431521,  131026920,
    135332446, 192557382, 196540379, 274294563, 288836072, 405997338, 411441844,
    589621137, 608996006, 866508216, 884431705, 1000000001};
long long b[] = {0, 1, 2, 1, 2, 0, 1, 2, 0, 1, 2, 0, 2, 1, 2, 0, 2, 1, 2, 0, 2,
                 1, 2, 0, 2, 1, 2, 0, 2, 1, 2, 0, 2, 1, 2, 0, 2, 1, 2, 0, 2, 1,
                 2, 0, 2, 1, 2, 0, 2, 1, 2, 0, 2, 1, 2, 0, 2, 1, 2, 0, 2, 1, 2,
                 0, 2, 1, 2, 0, 2, 1, 2, 0, 2, 1, 2, 0, 2, 1, 2, 0, 2, 1, 2, 0,
                 2, 1, 2, 0, 2, 1, 2, 0, 2, 1, 2, 0, 2, 1, 2, 0, 2, 1};
long long dp[1010][10];
long long cnt[5];
int main() {
  long long n, p;
  cin >> n >> p;
  for (int i = (0); i < (102); i++) {
    if (a[i] > p) break;
    cnt[b[i]] += ((p - a[i] + max(0ll, p - (a[i + 1] - 1))) *
                  (min(p + 1, a[i + 1]) - a[i]) / 2) %
                 mod;
    cnt[b[i]] %= mod;
  }
  for (int i = (0); i < (5); i++) dp[0][i] = -1;
  dp[0][0] = 1;
  for (int i = (1); i < (n + 1); i++) {
    for (int j = (0); j < (3); j++) {
      for (int k = (0); k < (4); k++) {
        if (dp[i - 1][k] != -1) {
          dp[i][k ^ j] = (dp[i][k ^ j] + (dp[i - 1][k] * cnt[j]) % mod) % mod;
        }
      }
    }
  }
  int ans = 0;
  for (int i = (1); i < (4); i++) {
    ans = (ans + dp[n][i]) % mod;
  }
  cout << ans << "\n";
  return 0;
}
