link
code
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <algorithm>
#include <vector>
#include <queue>
#include <cctype>
#include <cmath>
#include <cstring>
#define forn(i, n) for(int i = 0; i < int(n); ++i)
using namespace std;
using ll = long long;
template <typename T> void read(T & x){
x = 0; int op = 1; char ch = getchar();
while (!isdigit(ch)){ if (ch == '-') op = -1; ch = getchar();}
while (isdigit(ch)){x=(x<<1)+(x<<3)+(ch^48); ch = getchar();}
x*= op;
}
ll f[12][1 << 11];
int vis[1 << 12];
int n, m;
void solve(){
vector<int> head[1 << 11];
memset(vis, 0, sizeof 0);
for (int i = 0; i < 1 << n; ++i) {
vis[i] = 1;
int cnt = 0;
for (int j = 0; j < n; ++j) {
if (i & 1 << j){
if (cnt & 1){vis[i] = 0; break;}
}else{
++cnt;
}
}
if (cnt & 1) vis[i] = 0;
}
for (int i = 0; i < 1 << n; ++i) {
for (int j = 0; j < 1 << n; ++j) {
if (vis[i | j] && (i & j) == 0) {
head[i].push_back(j);
}
}
}
memset(f, 0, sizeof f);
f[0][0] = 1;
for (int i = 1; i <= m; ++i) {
for (int j = 0; j < 1 << n; ++j) {
for (int e : head[j]) {
f[i][j] += f[i - 1][e];
}
}
}
printf("%lld\n", f[m][0]);
}
int main(){
while (scanf("%d%d", &n, &m)){
if (n == 0 && m == 0) break;
solve();
}
return 0;
}