#include <iostream>

#include <cmath>
#include <cstdlib>
 
int getWrongMoves(int n, int k)
{
    int result = 1;
    for (int i = 1; i < n - k; ++i)
    {
        result = 2 * result + i;
    }
    return  result;
}
 
int main(int argc, char *argv[])
{
    int n = 5;
    int k = 2;
 
    if (argc > 2)
    {
        n = atoi(argv[1]);
        k = atoi(argv[2])+1;
    }
    if (n < 1 || n > 100)
    {
        std::cout << "Usage: zenik <N>, <K>\n"
                  " where 1 <= N, K <= 100" << std::endl;
        return 0;
    }
 
    double allMoves = std::pow(2, n-1);
    double wrongMoves = 0;
 
    if (k == 1)
    {
        wrongMoves = allMoves - 1;
    }
    else if (k >= n)
    {
        wrongMoves = 0;
    }
    else
    {
        wrongMoves = getWrongMoves(n, k);
    }
 
    std::cout << "all moves: " << allMoves <<  std::endl;
    std::cout << "wrong moves: " << wrongMoves <<  std::endl;
    std::cout << "corect moves: " << allMoves - wrongMoves <<  std::endl;
 
    return 0;
}