#include<stdio.h>
struct A{
int A,B;
void init(){
scanf("%d%d",&A,&B);
}
void work(){
if(A>B){
int t=A;
A=B;
B=t;
}
int s=1;
for(int i=1;i<=A;i++)
s*=i;
printf("%d\n",s);
}
}sol;
int main(){
sol.init();
sol.work();
return 0;
}
#include<bits/stdc++.h>
using namespace std;
int n,m,i,j,c,a=2e9,ai;
string s,t;
int main(){
cin>>n>>m>>s>>t;
for(i=0;i<=m-n;i++)
{
for(c=j=0;j<n;j++)
t[i+j]==s[j]?0:c++;
c<a?a=c,ai=i:0;
}
cout<<a<<endl;
for(c=j=0;j<n;j++)
t[ai+j]!=s[j]?cout<<j+1<<" ",0:0;
}
#include<bits/stdc++.h>
#define F(i,a,b) for(int i=(a);i<=(b);++i)
using namespace std;
typedef long long ll;
typedef pair<int,int>P;
const int N=2e5+7;
int n,m;
vector<P>L[N],R[N];
ll c[N],ans;
int main()
{
F(i,1,N-1)c[i]=INT_MAX;
scanf("%d%d",&n,&m);
F(i,1,n)
{
int l,r,v;
scanf("%d%d%d",&l,&r,&v);
L[l].push_back({r-l+1,v});
R[r].push_back({r-l+1,v});
}
ans=INT_MAX;
F(i,1,N-1)
{
for(auto &it:L[i])
{
if(it.first>=m)continue;
ans=min(ans,c[m-it.first]+it.second);
}
for(auto &it:R[i])
c[it.first]=min(c[it.first],1ll*it.second);
}
printf("%I64d\n",ans==INT_MAX?-1:ans);
return 0;
}