#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1000000007;
long long dp[150][2][2][150][150];
long long S[2][2][150][150];
int n, m;
long long Pyt(int a, int b, int r1, int r2, int c1, int c2) {
  if (!(r1 >= 0 && r1 < m && r2 >= 0 && r2 < m)) return 0;
  if (!(c1 >= 0 && c1 < m && c2 >= 0 && c2 < m)) return 0;
  long long w = S[a][b][r2][c2];
  if (r1 != 0) w -= S[a][b][r1 - 1][c2];
  if (c1 != 0) w -= S[a][b][r2][c1 - 1];
  while (w < 0) w += MOD;
  if (r1 != 0 && c1 != 0) w += S[a][b][r1 - 1][c1 - 1];
  w %= MOD;
  return w;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin >> n >> m;
  for (int i = 0; i < m; ++i)
    for (int j = i; j < m; ++j) dp[0][1][1][i][j] = 1;
  for (int i = 1; i < n; ++i) {
    for (int j = 0; j < 2; ++j) {
      for (int k = 0; k < 2; ++k) {
        for (int l = 0; l < m; ++l) {
          for (int o = 0; o < m; ++o) {
            S[j][k][l][o] = dp[i - 1][j][k][l][o];
            if (l != 0) S[j][k][l][o] += S[j][k][l - 1][o];
            if (o != 0) S[j][k][l][o] += S[j][k][l][o - 1];
            S[j][k][l][o] %= MOD;
            if (l != 0 && o != 0) S[j][k][l][o] -= S[j][k][l - 1][o - 1];
            if (S[j][k][l][o] < 0) S[j][k][l][o] += MOD;
          }
        }
      }
    }
    for (int j = 0; j < m; ++j) {
      for (int k = 0; k < m; ++k) {
        if (j > k) {
          for (int l = 0; l < 2; ++l)
            for (int o = 0; o < 2; ++o) dp[i][l][o][j][k] = 0;
          continue;
        }
        dp[i][1][1][j][k] = Pyt(1, 1, j, k, j, k);
        dp[i][1][0][j][k] =
            (Pyt(1, 0, j, k, k, m - 1) + Pyt(1, 1, j, k, k + 1, m - 1)) % MOD;
        dp[i][0][1][j][k] =
            (Pyt(1, 1, 0, j - 1, j, k) + Pyt(0, 1, 0, j, j, k)) % MOD;
        dp[i][0][0][j][k] =
            (Pyt(1, 1, 0, j - 1, k + 1, m - 1) + Pyt(1, 0, 0, j - 1, k, m - 1) +
             Pyt(0, 1, 0, j, k + 1, m - 1) + Pyt(0, 0, 0, j, k, m - 1)) %
            MOD;
      }
    }
  }
  long long odp = 0;
  for (int i = 0; i < n; ++i)
    for (int j = 0; j < 2; ++j)
      for (int k = 0; k < 2; ++k)
        for (int l = 0; l < m; ++l)
          for (int o = l; o < m; ++o)
            odp = (odp + dp[i][j][k][l][o] * (n - i)) % MOD;
  cout << odp;
  return 0;
}
