#include <iostream>
#include <map>
using namespace std;

int calcZ(int px, long long D){
	int res = 0;
	while (px){
		res+=px;
		px/=D;
	}	
	return res;
}

long long calc(map<long long,int> factor){
	long long ans = 0;
   	for (auto x : factor){
   		auto value = x.first;
   		auto degree= x.second;
   		int curD = 1;
   		while (calcZ(curD,value) < degree)
   			curD++;
   		ans = max(ans,curD*value);
   	}
   	return ans;
}

int main() {
	// your code goes here
	map<long long,int> m;
	m[2] = 2;
	cout << calc (m)<<endl;// (4)
	m[2] = 3;
	cout << calc (m)<<endl;// (8)
	m[3] = 2;
	cout << calc (m)<<endl;// (72)
	m[3] = 0;
	m[2] = 20;
	cout << calc (m)<<endl;// (2^20) 
	m[2] = 3;
	m[3] = 1;
	m[5] = 1;
	cout << calc (m)<<endl;// 120 
	m[2] = 0;
	m[3] = 3;
	m[5] = 1;
	m[7] = 1;
	cout << calc (m)<<endl;// 945 
	return 0;
}