#include <bits/stdc++.h>
using namespace std;
const long long mod = 1e9 + 7;
long long n, m, dp[155][155][155][4], qz[155][155][4], hz[155][155][4],
    zz[155][155][4], gz[155][155][4];
void add(long long &x, long long y) {
  x += y;
  if (x >= mod) x -= mod;
}
signed main() {
  cin >> n >> m;
  for (long long i = 1; i <= m; ++i) {
    for (long long j = i; j <= m; ++j) {
      dp[1][i][j][3] = 1;
    }
  }
  for (long long i = 1; i < n; ++i) {
    memset(qz, 0, sizeof(qz));
    memset(zz, 0, sizeof(zz));
    memset(hz, 0, sizeof(hz));
    memset(gz, 0, sizeof(gz));
    for (long long j = 1; j <= m; ++j) {
      for (long long k = j; k <= m; ++k) {
        for (long long l = 0; l < 4; ++l) {
          qz[j][k][l] = qz[j][k - 1][l] + dp[i][j][k][l];
          if (qz[j][k][l] >= mod) qz[j][k][l] -= mod;
        }
      }
    }
    for (long long j = m; j >= 1; --j) {
      for (long long k = j; k >= 1; --k) {
        for (long long l = 0; l < 4; ++l) {
          hz[j][k][l] = hz[j][k + 1][l] + dp[i][k][j][l];
          if (hz[j][k][l] >= mod) hz[j][k][l] -= mod;
        }
      }
    }
    for (long long j = 1; j <= m; ++j) {
      for (long long k = j; k <= m; ++k) {
        for (long long l = 0; l < 4; ++l) {
          zz[j][k][l] = zz[j][k - 1][l] + hz[k][j][l];
          if (zz[j][k][l] >= mod) zz[j][k][l] -= mod;
          gz[j][k][l] =
              (gz[j - 1][k][l] + (qz[j][m][l] - qz[j][k - 1][l] + mod)) % mod;
        }
      }
    }
    for (long long j = 1; j <= m; ++j) {
      for (long long k = j; k <= m; ++k) {
        add(dp[i + 1][j][k][0], (zz[j][m][0] - zz[k + 1][m][0] - zz[j][k][0] +
                                 hz[k][j][0] + mod * 10) %
                                    mod);
        add(dp[i + 1][j][k][0],
            (zz[j][m][3] - zz[k + 1][m][3] - zz[j][k][3] + mod * 10) % mod);
        add(dp[i + 1][j][k][1], (zz[1][k][1] - zz[1][j - 1][1] - zz[j][k][1] +
                                 qz[j][k][1] + mod * 10) %
                                    mod);
        add(dp[i + 1][j][k][1],
            (zz[1][k][3] - zz[1][j - 1][3] - zz[j][k][3] + mod * 10) % mod);
        add(dp[i + 1][j][k][2], (gz[j][k][2] + mod * 10) % mod);
        add(dp[i + 1][j][k][2], (gz[j][k][0] - (qz[j][m][0] - qz[j][k][0]) -
                                 dp[i][j][k][0] + mod * 10) %
                                    mod);
        add(dp[i + 1][j][k][2], (gz[j][k][1] - (hz[k][1][1] - hz[k][j][1]) -
                                 dp[i][j][k][1] + mod * 10) %
                                    mod);
        add(dp[i + 1][j][k][2],
            (gz[j][k][3] - (qz[j][m][3] - qz[j][k][3]) -
             (hz[k][1][3] - hz[k][j][3]) - dp[i][j][k][3] + mod * 10) %
                mod);
        add(dp[i + 1][j][k][3], zz[j][k][3]);
      }
    }
  }
  long long ans = 0;
  for (long long l = 1; l <= n; ++l) {
    for (long long i = 1; i <= m; ++i) {
      for (long long j = i; j <= m; ++j) {
        for (long long k = 0; k < 4; ++k) {
          add(ans, dp[l][i][j][k] * (n - l + 1) % mod);
        }
      }
    }
  }
  cout << ans << endl;
}
