this should work for your both cases:
awk 'NR==FNR{a[$1]=$2;next;} {a[$1]=($1 in a)?a[$1]$2:$2}END{for(x in a)print x,a[x]}' f1 f2|sort
output for case one:
1 aa
2 b
3 c
4 d
5 e
6 ff
7 g
8 h
output for case two:
27 277
28 2213
29 376
30 1512
31 2130
32 135
33 1810
34 2428