#include <bits/stdc++.h>
using namespace std;
long long X[155][155], F[2][155][155], n, m, ans = 0;
int main() {
  scanf("%lld%lld", &n, &m);
  for (int i = 0; i <= m; i++) X[i][1] = 1;
  for (int i = 1; i <= n; i++) X[1][i] = 1;
  for (int i = 2; i <= m; i++)
    for (int j = 2; j <= n; j++)
      X[i][j] = (X[i][j - 1] + 2 * X[i - 1][j] - X[i - 2][j]) % 1000000007;
  for (int i = 0; i <= m; i++)
    for (int j = 1; j <= n; j++) X[i][j] = (X[i][j] + X[i][j - 1]) % 1000000007;
  for (int T = 1, a = 0, b = 1; T <= n; T++, swap(a, b)) {
    for (int i = 1; i <= m; i++)
      for (int j = 1; j <= m; j++)
        F[a][i][j] = (F[a][i][j] + F[a][i - 1][j] + F[a][i][j - 1] -
                      F[a][i - 1][j - 1]) %
                     1000000007;
    for (int i = 1; i <= m; i++)
      for (int j = i; j <= m; j++)
        F[b][i][j] = (X[j - i][T] + F[a][i][j] - F[a][i][i - 1]) % 1000000007;
    for (int i = 1; i <= m; i++)
      for (int j = i; j <= m; j++)
        ans = (ans + F[b][i][j] * X[j - i][n - T + 1]) % 1000000007;
  }
  ans = (ans + ans) % 1000000007;
  for (int i = 1; i <= m; i++)
    for (int j = 1; j <= n; j++)
      for (int k = 1; j + k <= n + 1; k++)
        ans = (ans - (X[i][j] - X[i][j - 1]) * (X[i][k] - X[i][k - 1]) %
                         1000000007 * (m - i + 1)) %
              1000000007;
  return printf("%lld\n", (ans + 1000000007) % 1000000007), 0;
}
