#include <bits/stdc++.h>
using namespace std;
long long n, m;
const long long N = 155;
const long long mod = 1e9 + 7;
long long dp[N][N][N][2][2], s[N][N][N][2][2];
long long getsum(long long x, long long l1, long long r1, long long l2,
                 long long r2, long long t1, long long t2) {
  return (s[x][l1][r2][t1][t2] - s[x][l1][l2 - 1][t1][t2] -
          s[x][r1 + 1][r2][t1][t2] + s[x][r1 + 1][l2 - 1][t1][t2] + mod * 2) %
         mod;
}
signed main() {
  cin >> n >> m;
  for (long long i = 1; i <= n; i++) {
    for (long long l = 1; l <= m; l++)
      for (long long r = l; r <= m; r++) {
        dp[i][l][r][0][0] = 1 + s[i - 1][l][r][0][0];
        dp[i][l][r][0][1] = getsum(i - 1, l, r, r + 1, m, 0, 0) +
                            getsum(i - 1, l, r, r, m, 0, 1);
        dp[i][l][r][1][0] = getsum(i - 1, 1, l - 1, l, r, 0, 0) +
                            getsum(i - 1, 1, l, l, r, 1, 0);
        dp[i][l][r][1][1] = getsum(i - 1, 1, l - 1, r + 1, m, 0, 0) +
                            getsum(i - 1, 1, l - 1, r, m, 0, 1) +
                            getsum(i - 1, 1, l, r + 1, m, 1, 0) +
                            getsum(i - 1, 1, l, r, m, 1, 1);
      }
    for (long long len = 1; len <= m; len++)
      for (long long l = 1; l <= m - len + 1; l++)
        for (long long t1 = 0; t1 <= 1; t1++)
          for (long long t2 = 0; t2 <= 1; t2++) {
            long long r = l + len - 1;
            dp[i][l][r][t1][t2] %= mod;
            s[i][l][r][t1][t2] =
                (s[i][l][r - 1][t1][t2] + s[i][l + 1][r][t1][t2] -
                 s[i][l + 1][r - 1][t1][t2] + dp[i][l][r][t1][t2] + mod * 2) %
                mod;
          }
  }
  long long ans = 0;
  for (long long i = 1; i <= n; i++)
    for (long long t1 = 0; t1 <= 1; t1++)
      for (long long t2 = 0; t2 <= 1; t2++)
        ans = (ans + s[i][1][m][t1][t2]) % mod;
  cout << ans << endl;
  return 0;
}
