BUG: Chained `map().fillna()` with only integers supplied returns floats
### 

- [X] I have checked that this issue has not already been reported.

- [X] I have confirmed this bug exists on the [latest version](https://pandas.pydata.org/docs/whatsnew/index.html) of pandas.

- [ ] I have confirmed this bug exists on the master branch of pandas.


### Reproducible Example

```python
import pandas as pd

df = pd.DataFrame({
    "letter": ["a", "b", "c", "d", "e", "f"],
})

map_letter_to_num = {
    "a": 1,
    "d": 4, 
}

# ----- Map without fill -----
df_mapped = df.copy()
df_mapped["number"] = df["letter"].map(map_letter_to_num)
print(df_mapped)
#         letter  number
#       0      a     1.0
#       1      b     NaN
#       2      c     NaN
#       3      d     4.0
#       4      e     NaN
#       5      f     NaN

# I would expect column "numbers" to be floats, which they also are
# (NumPy treats NaN as a float)
print(df_mapped.dtypes)
#       letter     object
#       number    float64
#       dtype: object

# ----- Map with integer fill -----
df_mapped_filled = df.copy()
df_mapped_filled["number"] = df["letter"].map(map_letter_to_num).fillna(1)
print(df_mapped_filled)
#         letter  number
#       0      a     1.0
#       1      b     1.0
#       2      c     1.0
#       3      d     4.0
#       4      e     1.0
#       5      f     1.0

# I would expect column "number" to be integers, since I'm both mapping filling with only integers
print(df_mapped_filled.dtypes)
#       letter     object
#       number    float64
#       dtype: object
```


### Issue Description

I have a dataframe with a column, let's call it `"letters"`. I want to insert a new column, let's call it `"numbers"`, by mapping via a `dict`. The dict has letters as keys and integers as values.

Since I might not always have all the letter keys present in my dict, I want to fill the rest with a default value. For this, I'm using the `.fillna()` method with an integer as fill value.


### Expected Behavior

So seen "from the outside", I'm building a new column for which I supply values for all rows. All values are integers. Therefore, I would expect the resulting column to have the type `int`, or `int64`.

Instead, the column comes out as `int64`.

I think I understand why this happens, hence the phrasing "from the outside" used above.
The mapping is performed in a two-step process, first with `.map()` and then chained with `.fillna()`. The `.map()` returns a dataframe with the `"numbers"` column as `float64`, which it should. Then, `fillna()` operates on that and inserts integers into a float column. Inserting integers into a column of type `float64` converts the integers to `float64` as well.

Is that correctly interpreted?

I was hoping to circumvent this by supplying a `fillna` parameter in the `map()` method, to let Pandas know upfront that I have only integers to supply. However, `map()` does not take such a parameter.

For anyone looking for a solution, I could solve this by simple conversion after having debugged it.
```python
import numpy as np
df_mapped_filled["number"] = df_mapped_filled["number"].astype(np.int64)
```

### Installed Versions

The newest version of Pandas as of now is 1.3.3. I'm using 1.3.2 and release notes for 1.3.3 do not mention anything related to this issue.

<details>

INSTALLED VERSIONS
------------------
commit           : 5f648bf1706dd75a9ca0d29f26eadfbb595fe52b
python           : 3.9.7.final.0
python-bits      : 64
OS               : Windows
OS-release       : 10
Version          : 10.0.19042
machine          : AMD64
processor        : Intel64 Family 6 Model 158 Stepping 13, GenuineIntel
byteorder        : little
LC_ALL           : None
LANG             : None
LOCALE           : Danish_Denmark.1252

pandas           : 1.3.2
numpy            : 1.21.2
pytz             : 2021.1
dateutil         : 2.8.2
pip              : 21.2.4
setuptools       : 57.4.0
Cython           : None
pytest           : 6.2.5
hypothesis       : None
sphinx           : None
blosc            : None
feather          : None
xlsxwriter       : None
lxml.etree       : None
html5lib         : None
pymysql          : None
psycopg2         : None
jinja2           : None
IPython          : None
pandas_datareader: None
bs4              : None
bottleneck       : None
fsspec           : None
fastparquet      : None
gcsfs            : None
matplotlib       : None
numexpr          : None
odfpy            : None
openpyxl         : 3.0.7
pandas_gbq       : None
pyarrow          : None
pyxlsb           : None
s3fs             : None
scipy            : None
sqlalchemy       : None
tables           : None
tabulate         : 0.8.9
xarray           : None
xlrd             : None
xlwt             : None
numba            : None

</details>
