#include <bits/stdc++.h>
using namespace std;
long long re() {
  long long ret = 0, f = 1;
  char ch = getchar();
  while (!isdigit(ch)) f = (ch == '-') ? -f : f, ch = getchar();
  while (isdigit(ch)) ret = ret * 10 + ch - '0', ch = getchar();
  return ret * f;
}
const long long MOD = 1e9 + 7;
long long n, m, f[155][155][155][2][2], pre[155][155][155][2][2], ans;
long long get(long long i, long long x1, long long x2, long long y1,
              long long y2, long long k1, long long k2) {
  return (pre[i][x2][y2][k1][k2] - pre[i][x1 - 1][y2][k1][k2] -
          pre[i][x2][y1 - 1][k1][k2] + pre[i][x1 - 1][y1 - 1][k1][k2]) %
         MOD;
}
signed main() {
  n = re(), m = re();
  for (long long i = 1; i <= n; ++i) {
    for (long long l = 1; l <= m; ++l)
      for (long long r = l; r <= m; ++r) {
        f[i][l][r][0][0] = (get(i - 1, l, r, l, r, 0, 0) + 1) % MOD;
        f[i][l][r][0][1] =
            (get(i - 1, l, r, r, m, 0, 1) + get(i - 1, l, r, r + 1, m, 0, 0)) %
            MOD;
        f[i][l][r][1][0] =
            (get(i - 1, 1, l, l, r, 1, 0) + get(i - 1, 1, l - 1, l, r, 0, 0)) %
            MOD;
        f[i][l][r][1][1] =
            (get(i - 1, 1, l - 1, r + 1, m, 0, 0) +
             get(i - 1, 1, l - 1, r, m, 0, 1) +
             get(i - 1, 1, l, r + 1, m, 1, 0) + get(i - 1, 1, l, r, m, 1, 1)) %
            MOD;
      }
    for (long long l = 1; l <= m; ++l)
      for (long long r = 1; r <= m; ++r)
        for (long long k1 = 0; k1 <= 1; ++k1)
          for (long long k2 = 0; k2 <= 1; ++k2)
            pre[i][l][r][k1][k2] =
                (f[i][l][r][k1][k2] + pre[i][l - 1][r][k1][k2] +
                 pre[i][l][r - 1][k1][k2] - pre[i][l - 1][r - 1][k1][k2]) %
                MOD;
  }
  for (long long i = 1; i <= n; ++i)
    for (long long l = 1; l <= m; ++l)
      for (long long r = l; r <= m; ++r)
        for (long long k1 = 0; k1 <= 1; ++k1)
          for (long long k2 = 0; k2 <= 1; ++k2)
            ans += f[i][l][r][k1][k2], ans %= MOD;
  printf("%lld\n", (ans + MOD) % MOD);
  return 0;
}
