#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e3 + 1, maxm = 1e2 + 1, mod = 1e9 + 7;
int n, p, f[maxn][4], g[3], ans,
    sg[] = {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},
    pos[] = {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};
int calc(int l, int r) { return 1ll * (2 * p - l - r) * (r - l + 1) / 2 % mod; }
int main() {
  scanf("%d%d", &n, &p), f[0][0] = 1;
  for (int i = 0; i <= 101 && pos[i] <= p; i++)
    (g[sg[i]] += calc(pos[i], min(pos[i + 1], p) - 1)) %= mod;
  for (int i = 1; i <= n; i++)
    for (int x = 0; x < 4; x++)
      for (int y = 0; y < 4; y++)
        (f[i][x ^ y] += 1ll * f[i - 1][x] * g[y] % mod) %= mod;
  for (int i = 1; i < 4; i++) (ans += f[n][i]) %= mod;
  printf("%d\n", ans);
  return 0;
}
