#include<bits/stdc++.h>
using namespace std;
int n, m, a[100005], b[100005], c[100005];
string S[105][105];
clock_t start, finish;
string toString( int x )
{
string res = "";
while(x)
{
res = (char)( x % 10 + '0' ) + res;
x /= 10;
}
return res;
}
string add( string stra, string strb )
{
memset( a, 0, sizeof(a) );
memset( b, 0, sizeof(b) );
memset( c, 0, sizeof(c) );
for( int i = 0; i < (int)stra.size(); i++ )
a[i+1] = stra[ stra.size() - i - 1 ] - '0';
for( int i = 0; i < (int)strb.size(); i++ )
b[i+1] = strb[ strb.size() - i - 1 ] - '0';
int lenc = 0, x = 0;
while( lenc <= (int)stra.size() || lenc <= (int)strb.size() )
{
c[lenc] = a[lenc] + b[lenc] + x;
x = c[lenc] / 10;
c[lenc] %= 10;
lenc++;
}
c[lenc] = x;
while( c[lenc] == 0 ) lenc--;
string res = "";
for( int i = lenc; i >= 1; i-- )
res = res + (char)( c[i] + '0' );
return res;
}
string mul( string stra, string strb )
{
memset( a, 0, sizeof(a) );
memset( b, 0, sizeof(b) );
memset( c, 0, sizeof(c) );
for( int i = 0; i < (int)stra.size(); i++ )
a[i+1] = stra[ stra.size() - i - 1 ] - '0';
for( int i = 0; i < (int)strb.size(); i++ )
b[i+1] = strb[ strb.size() - i - 1 ] - '0';
int lenc = (int)stra.size() + (int)strb.size();
for( int i = 1; i <= (int)stra.size(); i++ )
{
int x = 0;
for( int j = 1; j <= (int)strb.size(); j++ )
{
c[ i + j - 1 ] += a[i] * b[j] + x;
x = c[ i + j - 1 ] / 10;
c[ i + j - 1 ] %= 10;
}
c[ i + (int)strb.size() ] += x;
}
while( c[lenc] == 0 ) lenc--;
string res = "";
for( int i = lenc; i >= 1; i-- )
res = res + (char)( c[i] + '0' );
return res;
}
int main()
{
S[0][0] = "1";
for( int i = 1; i <= 100; i++ )
S[i][0] = S[0][i] = "0";
for( int i = 1; i <= 100; i++ )
for( int j = 1; j <= i; j++ )
S[i][j] = add( mul( toString(j), S[i-1][j] ), S[i-1][j-1] );
while( scanf( "%d%d", &n, &m ) != EOF )
{
if( n < m )
printf( "0\n" );
printf( "%s\n", S[n][m].c_str() );
}
return 0;
}