#include <bits/stdc++.h>   using namespace std;   int Int() {     int x;     scanf( %d , &x);     return x;   }   long long Long() {     long long x;     scanf( %lld , &x);     return x;   }   void err(istream_iterator<string> it) { cout << endl; }   template <typename T, typename... Args>   void err(istream_iterator<string> it, T a, Args... args) {     cerr << *it <<   =   << a <<    ;     err(++it, args...);   }   const int N = (int)2e5 + 5;   const int maxN = (int)1e6 + 6;   const long long Mod = (long long)1e9 + 7;   const int inf = (int)2e9;   const long long Inf = (long long)1e18;   long long dp[20][5][5][11][11];   int n, k;   long long call(int pos, int prior, int last, int hump, int uhump) {     if (pos == n) {       return hump == k and uhump == k - 1;     }     long long &ret = dp[pos][prior][last][hump][uhump];     if (~ret) return ret;     ret = 0;     for (int i = 1; i <= 4; ++i) {       if (i == last) continue;       int f = hump;       int first = uhump;       if (prior and last) {         f += (prior < last and last > i);         first += (prior > last and last < i);       }       ret += call(pos + 1, last, i, f, first);     }     return ret;   }   int main() {     int test = 1, tc = 0;     while (test--) {       n = Int(), k = Int();       memset(dp, -1, sizeof dp);       long long res = 0;       for (int i = 1; i <= 4; ++i) {         res += call(1, 0, i, 0, 0);       }       cout << res <<   n ;     }     return 0;   }   