#include <bits/stdc++.h>
using namespace std;
const int mod = 1000000007;
inline int add(int a, int b) {
  a += b;
  if (a >= mod) a -= mod;
  return a;
}
inline int mult(int a, int b) {
  long long t = 1ll * a * b;
  if (t >= mod) t %= mod;
  return t;
}
inline int dec(int a, int b) {
  a -= b;
  if (a < 0) a += mod;
  return a;
}
int n, m, ans = 0;
int dp[155][155][155][2][2];
int val(int i, int l1, int l2, int r1, int r2, int t1, int t2) {
  return dec(add(dp[i][l2][r2][t1][t2], dp[i][l1 - 1][r1 - 1][t1][t2]),
             add(dp[i][l1 - 1][r2][t1][t2], dp[i][l2][r1 - 1][t1][t2]));
}
int main() {
  scanf("%d%d", &n, &m);
  for (int 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] = add((i == 1), val(i - 1, l, r, l, r, 0, 0));
        dp[i][l][r][0][1] =
            add(val(i - 1, l, r, r + 1, m, 0, 0), val(i - 1, l, r, r, m, 0, 1));
        dp[i][l][r][1][0] =
            add(val(i - 1, 1, l - 1, l, r, 0, 0), val(i - 1, 1, l, l, r, 1, 0));
        dp[i][l][r][1][1] = add(add(val(i - 1, 1, l - 1, r + 1, m, 0, 0),
                                    val(i - 1, 1, l, r + 1, m, 1, 0)),
                                add(val(i - 1, 1, l, r, m, 1, 1),
                                    val(i - 1, 1, l - 1, r, m, 0, 1)));
      }
    }
    for (int l = 1; l <= m; l++) {
      for (int r = 1; r <= m; r++) {
        for (int t1 = 0; t1 < 2; t1++) {
          for (int t2 = 0; t2 < 2; t2++) {
            dp[i][l][r][t1][t2] =
                add(dp[i][l][r][t1][t2],
                    dec(add(dp[i][l - 1][r][t1][t2], dp[i][l][r - 1][t1][t2]),
                        dp[i][l - 1][r - 1][t1][t2]));
          }
        }
      }
    }
    for (int j = 0; j < 2; j++) {
      for (int k = 0; k < 2; k++) {
        ans = add(ans, mult(n - i + 1, dp[i][m][m][j][k]));
      }
    }
  }
  printf("%d\n", ans);
  return 0;
}
