//居然又是数学
#include<iostream>
#include<algorithm>
#include<vector>
#include<unordered_map>
using namespace std;
typedef long long LL;
const int mod=1e9+7;
//1.试除法求约数
void get_divisors(int n)
{
vector<int> res;
for(int i=1;i<=n/i;i++)
if(n%i==0)
{
res.push_back(i);//加入约数
if(i!=n/i)res.push_back(n/i);
}
sort(res.begin(),res.end());
for(auto t:res)cout<<t<<' ';
cout<<endl;
return ;
}
//2.求约数个数
void q(int x)
{
unordered_map<int,int>primes;
cin>>x;
for(int i=2;i<=x/i;i++)
while(x%i==0)
{
x/=i;
primes[i]++;//质因子i个数加1
}
if(x>1)primes[x]++;
LL res=1;
for(auto prime:primes)res=res*(prime.second+1)%mod;//乘上(质因子个数+1);
cout<<res;
return ;
}
//3.求约数之和
void sum(int x)
{
unordered_map<int,int>primes;
cin>>x;
for(int i=2;i<=x/i;i++)
while(x%i==0)
{
x/=i;
primes[i]++;//质因子i个数加1
}
if(x>1)primes[x]++;
LL res=1;
for(auto prime:primes)//乘上(质因子个数+1);
{
int p=prime.first,a=prime.second;
LL t=1;
while(a--)t=(t*p+1)%mod;//等比数列求和
res=res*t%mod;
}
cout<<res;
return ;
}
//4.求最大公约数
int gcd(int a,int b)
{
if(b==0)return a;
else return gcd(b,a%b);
//a%b==a-(a/b)*b==a-cb,若 d能整除a,b。则d能整除a-cb(a-cb<a,递归能求得最大公约数)
//则(a,b)==(b,a%b)
}
int main()
{
int a,b;
cin>>a>>b;
cout<<gcd(a,b)<<endl;
return 0;
}