I faced a similar situation. I wanted to control everything from the template without generating the template using some script. My input range is also limited as in your case. I ended up putting a horrible horrible hack. I am kind of ashamed to post it here but if it helps one more person, it may be worth it.
Have a mapping table which will do the math for you and define it for all possible inputs
"Mappings" : {
"HorribleHackForSubtraction" : {
"1" : {"SubtractOne" : "0"},
"2" : {"SubtractOne" : "1"},
"3" : {"SubtractOne" : "2"},
"4" : {"SubtractOne" : "3"},
"5" : {"SubtractOne" : "4"},
"6" : {"SubtractOne" : "5"},
"7" : {"SubtractOne" : "6"},
"8" : {"SubtractOne" : "7"},
"9" : {"SubtractOne" : "8"},
"10" : {"SubtractOne" : "9"},
"11" : {"SubtractOne" : "10"},
"12" : {"SubtractOne" : "11"},
"13" : {"SubtractOne" : "12"},
"14" : {"SubtractOne" : "13"},
"15" : {"SubtractOne" : "14"},
"16" : {"SubtractOne" : "15"},
}
},
You can refer to the computed value as
{ "Fn::FindInMap" : [ "HorribleHackForSubtraction", { "Ref" : "MyInputParam"}, "SubtractOne" ] }