#include <bits/stdc++.h>
using namespace std;
template <class T>
inline int maximize(T& a, T b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T>
inline int minimize(T& a, T b) {
  if (a > b) {
    a = b;
    return 1;
  }
  return 0;
}
const int N = 152, INF = 0x3f3f3f3f, mod = 1000000007;
template <class T>
inline void add(T& a, T b) {
  a += b;
  if (a >= mod) a -= mod;
  if (a < 0) a += mod;
}
int n, m, dp[N][N][4], sum[N][N][4];
long long ans;
int main() {
  cin >> n >> m;
  if (n < m) swap(n, m);
  for (int j = 1; j <= m; ++j) {
    for (int k = j; k <= m; ++k) {
      add(ans, 1LL * n);
      dp[j][k][0] = 1;
    }
  }
  for (int i = 2; i <= n; ++i) {
    for (int j = 1; j <= m; ++j) {
      for (int k = 1; k <= m; ++k) {
        for (int l = 0; l < 4; ++l) {
          sum[j][k][l] = 0;
          add(sum[j][k][l], sum[j - 1][k][l]);
          add(sum[j][k][l], sum[j][k - 1][l]);
          add(sum[j][k][l], mod - sum[j - 1][k - 1][l]);
          add(sum[j][k][l], dp[j][k][l]);
        }
      }
    }
    memset(dp, 0, sizeof(dp));
    for (int j = 1; j <= m; ++j) {
      for (int k = j; k <= m; ++k) {
        add(dp[j][k][0], sum[k][k][0]);
        add(dp[j][k][0], mod - sum[k][j - 1][0]);
        add(dp[j][k][0], mod - sum[j - 1][k][0]);
        add(dp[j][k][0], sum[j - 1][j - 1][0]);
        add(dp[j][k][1], sum[j - 1][k][0]);
        add(dp[j][k][1], mod - sum[j - 1][j - 1][0]);
        add(dp[j][k][1], sum[j][k][1]);
        add(dp[j][k][1], mod - sum[j][j - 1][1]);
        add(dp[j][k][2], sum[k][m][0]);
        add(dp[j][k][2], mod - sum[k][k][0]);
        add(dp[j][k][2], mod - sum[j - 1][m][0]);
        add(dp[j][k][2], sum[j - 1][k][0]);
        add(dp[j][k][2], sum[k][m][2]);
        add(dp[j][k][2], mod - sum[k][k - 1][2]);
        add(dp[j][k][2], mod - sum[j - 1][m][2]);
        add(dp[j][k][2], sum[j - 1][k - 1][2]);
        add(dp[j][k][3], sum[j - 1][m][0]);
        add(dp[j][k][3], mod - sum[j - 1][k][0]);
        add(dp[j][k][3], sum[j - 1][m][1]);
        add(dp[j][k][3], mod - sum[j - 1][k - 1][1]);
        add(dp[j][k][3], sum[j][m][2]);
        add(dp[j][k][3], mod - sum[j][k][2]);
        add(dp[j][k][3], sum[j][m][3]);
        add(dp[j][k][3], mod - sum[j][k - 1][3]);
        for (int l = 0; l < 4; ++l)
          add(ans, dp[j][k][l] * (long long)(n - i + 1) % mod);
      }
    }
  }
  printf("%I64d\n", ans);
  return 0;
}
