#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1e9 + 7, MAX = 159;
long long n, m, dp[MAX][MAX][MAX][2][2], ans;
long long get(int i, int x1, int x2, int y1, int y2, int x, int y) {
  return (dp[i][x1][y1][x][y] - dp[i][x1][y2][x][y] - dp[i][x2][y1][x][y] +
          dp[i][x2][y2][x][y]) %
         MOD;
}
int main() {
  cin >> n >> m;
  for (long long i = 1; i <= n; i++) {
    for (int l = 1; l <= m; l++)
      for (int r = l; r <= m; r++)
        dp[i][l][r][0][0] =
            ((i == 1 ? 1 : 0) + get(i - 1, l - 1, r, l - 1, r, 0, 0)) % MOD,
        dp[i][l][r][0][1] = (get(i - 1, l - 1, r, r, m, 0, 0) +
                             get(i - 1, l - 1, r, r - 1, m, 0, 1)) %
                            MOD,
        dp[i][l][r][1][0] = (get(i - 1, 0, l - 1, l - 1, r, 0, 0) +
                             get(i - 1, 0, l, l - 1, r, 1, 0)) %
                            MOD,
        dp[i][l][r][1][1] =
            (get(i - 1, 0, l - 1, r, m, 0, 0) +
             get(i - 1, 0, l - 1, r - 1, m, 0, 1) +
             get(i - 1, 0, l, r, m, 1, 0) + get(i - 1, 0, l, r - 1, m, 1, 1)) %
            MOD;
    for (int l = 1; l <= m; l++)
      for (int r = 1; r <= m; r++)
        for (int c = 0; c < 2; c++)
          for (int d = 0; d < 2; d++)
            dp[i][l][r][c][d] =
                (dp[i][l - 1][r][c][d] + dp[i][l][r - 1][c][d] -
                 dp[i][l - 1][r - 1][c][d] + dp[i][l][r][c][d]) %
                MOD;
    for (int x = 0; x < 2; x++)
      for (int y = 0; y < 2; y++)
        ans = (ans + (n - i + 1) * dp[i][m][m][x][y] % MOD) % MOD;
  }
  cout << (ans + MOD) % MOD;
}
