/*
* @Description: To iterate is human, to recurse divine.
* @Autor: Recursion
* @Date: 2022-05-22 22:00:52
* @LastEditTime: 2022-05-22 22:30:54
*/
#include <bits/stdc++.h>
#define LL long long
using namespace std;
const int maxn = 1e6 + 10;
const int mod = 1e9 + 7;
const int INF = 1e9 + 10;
const int N = 1e6;
LL dp[105][105][105];//进店数,喝酒数,酒
int n,m;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> n >> m;
dp[0][0][2] = 1;
for(int i = 0;i <= n;i++)
for(int j = 0;j <= m;j ++)
for(int k = 0;k <= 100;k ++){
if(j)
dp[i][j][k] += dp[i][j - 1][k + 1];
if(i&&k%2==0)
dp[i][j][k] += dp[i - 1][j][k/2];
dp[i][j][k] %= mod;
}
cout << dp[n][m - 1][1]%mod << endl;
return 0;
}