#include <iostream>

uint32_t firstPermutation(uint32_t &p){
    return (1 << p) -1;
}

uint32_t lastPermutation(uint32_t &p){
    return (0xFFFFFFFF >> p) ^ 0xFFFFFFFF;
}

uint32_t nextPermutation(uint32_t &p){
    uint32_t t = (p | (p - 1));
    return (t + 1) | (((~t & -~t) - 1) >> (__builtin_ctz(p) + 1));
}

int sumIndices(uint32_t n){
    int sum = 0;
    do sum += __builtin_ctz(n);
    while (n &= n-1);
    return sum;
}

int main(int argc, char **argv){
    uint32_t n,  // bit set
             k,  // sum of indicies
             p,  // current permutation
             lp; // final permutation


    std::cin >> k;
	std::cin >> n;

	//k = std::atoi(argv[1]);
    //n = std::atoi(argv[2]);

    p = firstPermutation(n);
    lp = lastPermutation(n);

    do {
        p = nextPermutation(p);
        if (sumIndices(p) == k){
            std::cout << p << std::endl;
        }
    } while(p != lp);

    return 0;
}
