#include <bits/stdc++.h>
using namespace std;
int f[2][150][150][4], g[150][150][4];
int n, m;
int p;
int gg(int l, int r, int a) {
  if (0 <= l && l < m && 0 <= r && r < m) {
    return g[l][r][a];
  }
  return 0;
}
int sum(int l1, int r1, int l2, int r2, int a) {
  return (0ll + gg(r1, r2, a) - gg(r1, l2 - 1, a) - gg(l1 - 1, r2, a) +
          gg(l1 - 1, l2 - 1, a)) %
         1000000007;
}
int main() {
  cin >> n >> m;
  int ans = 0;
  p = 0;
  for (int l = (0); l < (m); l++) {
    for (int r = (l); r < (m); r++) {
      f[1 - p][l][r][0] = 1;
      (ans) = (0ll + (ans) + (1)) % 1000000007;
    }
  }
  for (int _ = (1); _ < (n); _++) {
    memset(g, 0, sizeof(g));
    for (int k = (0); k < (4); k++) {
      for (int l = (0); l < (m); l++) {
        for (int r = (0); r < (m); r++) {
          (g[l][r][k]) = (0ll + (g[l][r][k]) +
                          (0ll + gg(l - 1, r, k) + gg(l, r - 1, k) -
                           gg(l - 1, r - 1, k) + f[1 - p][l][r][k])) %
                         1000000007;
        }
      }
    }
    memset(f[p], 0, sizeof(f[p]));
    for (int l = (0); l < (m); l++) {
      for (int r = (l); r < (m); r++) {
        (f[p][l][r][0]) =
            (0ll + (f[p][l][r][0]) + (sum(l, r, l, r, 0))) % 1000000007;
        (f[p][l][r][1]) =
            (0ll + (f[p][l][r][1]) + (sum(0, l, l, r, 1))) % 1000000007;
        (f[p][l][r][1]) =
            (0ll + (f[p][l][r][1]) + (sum(0, l - 1, l, r, 0))) % 1000000007;
        (f[p][l][r][2]) =
            (0ll + (f[p][l][r][2]) + (sum(l, r, r, m - 1, 2))) % 1000000007;
        (f[p][l][r][2]) =
            (0ll + (f[p][l][r][2]) + (sum(l, r, r + 1, m - 1, 0))) % 1000000007;
        (f[p][l][r][3]) =
            (0ll + (f[p][l][r][3]) + (sum(0, l, r, m - 1, 3))) % 1000000007;
        (f[p][l][r][3]) =
            (0ll + (f[p][l][r][3]) + (sum(0, l - 1, r, m - 1, 2))) % 1000000007;
        (f[p][l][r][3]) =
            (0ll + (f[p][l][r][3]) + (sum(0, l, r + 1, m - 1, 1))) % 1000000007;
        (f[p][l][r][3]) =
            (0ll + (f[p][l][r][3]) + (sum(0, l - 1, r + 1, m - 1, 0))) %
            1000000007;
        (f[p][l][r][0]) = (0ll + (f[p][l][r][0]) + (1)) % 1000000007;
        for (int k = (0); k < (4); k++) {
          (ans) = (0ll + (ans) + (f[p][l][r][k])) % 1000000007;
        }
      }
    }
    p = 1 - p;
  }
  if (ans < 0) {
    ans += 1000000007;
  }
  cout << ans << "\n";
  return 0;
}
