#include <cstdio>

long long dp[308][308];
long long dp2[308][308];
long long MOD=1000000007;
long long add(long long x,long long y) {
	x+=y;
	return x%MOD;
}
long long prod(long long x,long long y) {
	x*=y;
	return x%MOD;
}
int main() {
	int N,M;
	scanf("%d%d",&N,&M);
	dp[N-1][0]=1;
	for(int round=0;round<M;round++) {
		for(int i=0;i<=N;i++) {
			for(int j=0;j<=N;j++) dp2[i][j]=0;
		}
		for(int i=0;i<=N;i++) {
			for(int j=0;j<=i;j++) {
				dp2[i-j][0]=add(dp2[i-j][0],prod(dp[i][j],N-i));
				dp2[i][j]=add(dp2[i][j],prod(dp[i][j],j));
				if(i>j) dp2[i][j+1]=add(dp2[i][j+1],prod(dp[i][j],i-j));
			}
		}
		for(int i=0;i<=N;i++) {
			for(int j=0;j<=N;j++) dp[i][j]=dp2[i][j];
		}
	}
	printf("%lld\n",dp[0][0]);
	return 0;
}
