/*
思路来自下面博客链接:https://blog.csdn.net/liukx940818/article/details/44343439
开始使用暴力求解超时
这一个思路是说两两的找是否合适(即是不是相玲的两个数)
对于动态规划没有了解太多, 所以也不知道咋说
总的话就是在于
dp[i][j]+=dp[i-1][k];(这里的dp[i][j]指的是j开头的i位数的好数的数量,k是指在此基础上满足第i位所填数字为不相玲的数)
为什么这样做建议参考上面博客链接
可以举例说明
样例 4 2
10 11 12 13
dp[2][1]+=dp[1][k] k取与1不相玲的1 3
20 21 22 23
dp[2][2]+=dp[1][k] k取与1不相玲的0 2
20 21 22 23
dp[2][3]+=dp[1][k] k取与3不相玲的0 1 3
个人理解方法,做一记录
*/
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int k,l,a[105];
int dp[105][105];
long long count=0;
int main()
{
cin>>k>>l;
for(int i=0;i<k;i++)
dp[1][i]=1;
for(int i=2;i<=l;i++)
{
for(int j=0;j<k;j++)
{
for(int m=0;m<k;m++)
{
if(m!=j+1&&m!=j-1)
{
dp[i][j]+=dp[i-1][m];
dp[i][j]%=1000000007;
}
}
}
}
for(int i=1;i<k;i++)//1不能为开头
{
count+=dp[l][i];
}
cout<<count%1000000007<<endl;
return 0;
}