#include<bits/stdc++.h>
    #define ll            long long
    #define pb            push_back
    #define ppb           pop_back
    #define si            set <ll>
    #define endl          '\n'
    #define fr            first
    #define sc            second
    #define mii           map<ll ,ll >
    #define msi           map<string,ll >
    #define mis           map<ll , string>
    #define rep(i,a,b)    for(ll  i=a;i<b;i++)
    #define all(v)        v.begin(),v.end()
    #define sort(v)       sort(all(v))
    #define pii           pair<ll ,ll >
    #define vi            vector<ll >
    #define vii           vector<pair<ll , ll >>
    #define vs            vector<string>
    #define sz(x)         (ll)x.size()
    #define M             1000000007
    #define bs            binary_search
    #define rev(a)        reverse(all(a));
    #define sp(n)         setprecision(n)
    #define spl           " "
    #define arr(a,n)      rep(i,0,n) cin>>a[i]
    #define mod           998244353
    #define show(a,n)     for(ll i=0;i<n;i++) cout<<a[i]<<" "; cout<<endl;
    #define N             100000000
    #define what_is(x)    cout << #x << " is " << x << endl;
    #define time          cout << "\nTime elapsed: " << 1000 * clock() / CLOCKS_PER_SEC << "ms\n";
    #define INF           1ll<<32
    using namespace std;
    /*
    ll modularExponentiation(ll x,ll n,ll mm)
    {
        ll result=1;
        while(n>0)
        {
            if(n % 2 ==1)
                result=(result * x)%mm;
            x=(x*x)%mm;
            n=n/2;
        }
        return result;
    }
    ll modInverse(ll A,ll mm)
    {
        return modularExponentiation(A,mm-2,mm);
    }
        // Disjoll Set DataStructure
        map< ll,ll > parent;         // reserve space for map if n > 10000
        map< ll,ll > urank;

        void create(ll x)
        {
            parent[x] = x ;
            urank[x] = 0 ;         // rank = no. of nodes in its subtree
        }

        ll find(ll x)
        {
            if( parent[x] != x )    //path compression
            {
                parent[x] = find(parent[x]) ;
            }
            return parent[x];
        }

        void merge(ll x, ll y)
        {
            ll xroot = find(x);
            ll yroot = find(y);

            if( urank[xroot] <= urank[yroot] )    // Union by rank
            {
                parent[xroot] = yroot ;
                urank[yroot] = urank[yroot] + urank[xroot] ;
            }
            else
            {
                parent[yroot] = xroot;
                urank[xroot] = urank[xroot] + urank[yroot] ;
            }
        }
        ll gcd(ll a, ll b)
        {
            if (a == 0)
                return b;
            return gcd(b % a, a);
        }

        ll spf[MAXN];
        void sieve()
        {
            spf[1] = 1;
            for (ll i=2; i<MAXN; i++)
                spf[i] = i;
            for (ll i=4; i<MAXN; i+=2)
                spf[i] = 2;

            for (ll i=3; i*i<MAXN; i++)
            {
                if (spf[i] == i)
                {
                    for (ll j=i*i; j<MAXN; j+=i)
                    {
                    if (spf[j]==j)
                        spf[j] = i;
                    }
                }
            }
        }
        vector<ll> getFactorization(ll x)
        {
            vector<ll> ret;
            while (x != 1)
            {
                ret.push_back(spf[x]);
                x = x / spf[x];
            }
            return ret;
        }
        ll findGCD(vi v, ll n)
        {
            ll result = v[0];
            for (ll i = 1; i < n; i++)
                result = gcd(v[i], result);

            return result;
        }
        ll checkPrimeNumber(ll n)
        {
          bool flag = true;

          for(ll i = 2; i <= sqrt(n); ++i)
          {
              if(n%i == 0)
              {
                  flag = false;
                  break;
              }
          }
          return flag;
        }
        ll min(ll a,ll b)
        {
            return a<b?a:b;
        }

    vector<bool> prime(N+1,true);
    void SieveOfEratosthenes()
    {
        prime[0]=false;
        prime[1]=false;
        for (ll p=2; p*p<=N; p++)
        {
            if(prime[p] == true)
            {
              for (ll i=p*p; i<=N; i += p)
                prime[i] = false;
            }
        }
    }
    
       vector<ll> ret;
       vector<ll> getFactorization(ll n)
        {

            for(ll i=1;i<=sqrt(n);i++)
                if(n%i==0)
                {
                    if(i!=n/i) ret.pb(n/i),ret.pb(i);
                    else ret.pb(i);
                }
            return ret;

        }
    ll modularExponentiation(ll x,ll n,ll mm)
    {
        ll result=1;
        while(n>0)
        {
            if(n % 2 ==1)
                result=(result * x)%mm;
            x=(x*x)%mm;
            n=n/2;
        }
        return result;
    }
    ll modInverse(ll A,ll mm)
    {
        return modularExponentiation(A,mm-2,mm);
    }
    ll checkPrimeNumber(ll n)
        {
          bool flag = true;

          for(ll i = 2; i <= sqrt(n); ++i)
          {
              if(n%i == 0)
              {
                  flag = false;
                  break;
              }
          }
          return flag;
        }
    ll min(ll a,ll b)
    {
        return a>b?b:a;
    }
    ll max(ll a,ll b)
    {
        return a>b?a:b;
    }
    vector<bool> prime(N+1,true);
    void SieveOfEratosthenes()
    {
        prime[0]=false;
        prime[1]=false;
        for (ll p=2; p*p<=N; p++)
        {
            if(prime[p] == true)
            {
              for (ll i=p*p; i<=N; i += p)
                prime[i] = false;
            }
        }
    }


    vector<ll> divisors(int n)
    {
        vi res;
        for (int i=1; i<=sqrt(n); i++)
        {
            if (n%i == 0)
            {
                if (n/i == i)
                    res.pb(i);

                else {
                    res.pb(i);
                    res.pb(n/i);
                }
            }
        }
        return res;
    }
    */
    ll min(ll a,ll b)
    {
        return a>b?b:a;
    }
    ll max(ll a,ll b)
    {
        return a>b?a:b;
    }
    void solve()
    {
     ll h,a;
     cin>>h>>a;
     if(h%a==0) cout<<h/a;
     else cout<<h/a+1;
     
    }
     
    signed main()
    {
        ios_base::sync_with_stdio(false);
        cin.tie(0);
        cout.tie(0);
        ll t=1;
        //cin>>t;
        while(t--) solve();
    }


Measured memory_bytes: 256