static BigInteger fillCount(int m, int n)
	{
		BigInteger totalSum = BigInteger.ZERO;
		BigInteger[][] arrangements = new BigInteger[n+1][n];
		for (int i = 0; i <= n; i++)
			for (int j = 0; j < n; j++)
				arrangements[i][j] = BigInteger.ZERO;
		arrangements[1][0] = BigInteger.ONE;
		for (int i = 1; i < n; i++)
		{
			for (int j = 1; j <= n; j++)
				arrangements[j][i] = arrangements[j-1][i-1];
			for (int j = m; j <= n; j++)
				for (int k = j; k <= n; k++)
					if (k > j || i+1 == j)
						arrangements[0][i] = arrangements[0][i].add(arrangements[k][i]);
		}
		for (int i = 0; i <= n; i++)
			totalSum = totalSum.add(arrangements[i][n-1]);
		return totalSum;
	}